2

根据data.table1.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
4

1 回答 1

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

更新:在进行了更多搜索之后,这个问题/答案似乎还提供了有关如何使用foodwebfrom以编程方式检测依赖关系的更多信息library(mvbutils)

于 2013-07-01T11:47:52.897 回答