r语言 - 包装数据.表中使用包中求值的调用



我试图写一个简单的包装围绕data.table拆分应用组合使用(如aggregate, ddply等),以获得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

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

下面是FAQ 6.9对这个问题的回答:

我创建了一个依赖于data.table的包。我如何确保我的包是数据。表感知,以便从data.frame继承工作?
你不需要做任何特别的事情。只要在包的DESCRIPTION文件的Imports:Depends: fi eld中包含data.table即可。

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

使用数据。Table package in my own package

最新更新