4

我正在尝试data.table为拆分-应用-组合使用(如aggregateddply)编写一个简单的包装器,以便从data.table的速度中获益,但不使用其数据结构或语法。我尝试了以下方法。

fold = function(df, by, ...)
{
    library(data.table)
    dt = data.table(df)
    dt = dt[, eval(substitute(list(...))), by]
    df = as.data.frame(dt)
    return(df)
}

a = data.frame(x=c(1,1,1,2,2,2), y=runif(6))
b = fold(a, "x", y_min=min(y), y_max=max(y))
print(a)
print(b)

当我把它放在一个脚本中时这很好用source,但是当我把这个函数放在一个包中时,安装它并尝试使用它,我得到

Error in eval(expr, envir, enclos) : object 'y' not found
Calls: fold -> [ -> [.data.table -> [.data.frame -> eval -> eval

除了一般地尝试这个之外,我做错了什么?

4

1 回答 1

1

在评论之后,FAQ 6.9 回答了这个问题:

FAQ 6.9 我创建了一个依赖于 data.table 的包。如何确保我的包支持 data.table,以便从 data.frame 继承有效?
你不需要做任何特别的事情。只需包含data.table在包的说明文件的Imports:或字段中。Depends:

关于继承如何data.frame保持完全兼容的一些技术细节[.data.frame在这里:

在我自己的包中使用 data.table 包

于 2013-03-15T13:22:02.237 回答