根据data.table
ver 1.8.8 %between%
定义如下:
> `%between%`
function (x, y)
between(x, y[1], y[2], incbounds = TRUE)
<bytecode: 0x0000000050912810>
<environment: namespace:data.table>
我认为,通过这个微小的改变,这个函数将被矢量化,
function (x, y)
between(x, y[[1]], y[[2]], incbounds = TRUE)
喜欢between
s <- c(2, 5)
d <- c(7, 9)
> between(3, s, d)
[1] TRUE FALSE
这个想法来自于有一个包含两个向量的列表,这表明了这种可能的用法:
`between2%` <- function(x, lst) between(x, lst[[1]], lst[[2]], incbounds = TRUE)
> 3%between%c(s,d)
[1] TRUE
> 3%between2%list(s,d)
[1] TRUE FALSE
我的问题是:如果我更换了%between%
,data.table
包中的任何功能都会受到影响吗?我认为它不应该,[[
应该像[
那样使用原子向量。我对么?感谢
> 3%between2%c(1,5)
[1] TRUE
答案 0 :(得分:3)
我认为这是一个有趣的问题,因为我想知道一般来说,其他函数对函数的使用有何看法。据我所知,没有办法直接这样做(也许有人可以纠正我?)。但是,我将一些代码放在一起,在其他函数的文本表示中查找函数名称。对于%between%
,以下是:
library(data.table)
objs <- objects("package:data.table")
z <- textConnection("funs", open="w")
dump(list=objs, file=z)
close(z)
# find all mentions of `%between%` in `data.table` functions
funs[grep("%between%",funs)] ## only mentions are when %between% is defined
# find all mentions of all `data.table` functions in `data.table` functions
locations <- lapply(objs, function(x) grep(x,funs))
names(locations) <- objs
更新:在进行了一些搜索后,this question/answer似乎还提供了有关如何使用foodweb
中的library(mvbutils)
以编程方式检测依赖关系的更多信息。< / p>