我想在自己的软件包中使用data.table包。以下是最小工作示例:
我创建了一个名为test.fun的函数,该函数简单地创建一个小数据表对象,然后通过"A"列对"Val"列进行分组求和。代码如下:
test.fun<-function ()
{
library(data.table)
testdata<-data.table(A=rep(seq(1,5), 5), Val=rnorm(25))
setkey(testdata, A)
res<-testdata[,{list(Ct=length(Val),Total=sum(Val),Avg=mean(Val))},"A"]
return(res)
}
当我在常规的R会话中创建这个函数,然后运行该函数时,它按预期工作。
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
> res
A Ct Total Avg
[1,] 1 5 -0.5326444 -0.1065289
[2,] 2 5 -4.0832062 -0.8166412
[3,] 3 5 0.9458251 0.1891650
[4,] 4 5 2.0474791 0.4094958
[5,] 5 5 2.3609443 0.4721889
当我将这个函数放入一个包中,安装该包并加载该包后运行该函数时,我会收到一个错误信息。
> library(testpackage)
> res<-test.fun()
data.table 1.8.0 For help type: help("data.table")
Error in `[.data.frame`(x, i, j) : object 'Val' not found
可以有人解释一下为什么会发生这种情况,我该如何修复它。非常感谢任何帮助。
library(data.table)
,并在你的命名空间和 DESCRIPTION 中声明depends:data.table
。请注意不要改变原意。 - Andrie.datatable.aware = TRUE
选项来处理这个问题,如此问题和下面链接的vignette中讨论的一样。声明Depends: data.table
会将整个包附加到搜索路径中,这有时是不鼓励的。 - Niels