【发布时间】:2020-04-09 11:18:57
【问题描述】:
跟进this question,我构建了自己的包,它使用了data.table。
在包内,我使用data.table根据另一列计算矩阵中每列的均值。
以下内容:
datam <- cbind(matrix(rexp(100), 10), IN=c(rep(1,2), rep(2,3), rep(3,2), rep(4,1), rep(5,2)))
dd <- data.table::data.table(datam)
result <- dd[, lapply(.SD, mean), by=IN]
我让它工作的唯一方法是在我的DESCRIPTION 文件的Depends: 字段中包含data.table 和import(data.table) 在NAMESPACE 文件中。
现在我希望能够从我的包中调用使用 data.table 的函数,如下所示:
mypackage::myfunction(...)
但是,我收到以下错误:
lapply 中的错误(.SD,平均值):找不到对象“.SD”
只有当我在使用library() 加载包后调用我的函数时,此错误才会消失,如下所示:
library(mypackage)
myfunction(...)
由于我的包随后会从其他包中调用,有没有一种方法可以让它工作而不必每次都使用library(),就像我对需要函数的每个其他包所做的那样?
谢谢
编辑
我刚刚制作了一个 MWE 包来重现错误。请从下面的 Google Drive 链接下载:
https://drive.google.com/open?id=1yHxmQeoIOx9VIuL4EBrFWlGDBstnKJQs
我使用usethis 包构建它,在usethis_myexample.R 文件中。
包本身称为myexample,包含在myexample-package 文件夹中。在里面你可以看到DESCRIPTION文件在Imports部分包含data.table,NAMESPACE文件包含import(data.table)。
R 文件夹内的functions.R 文件中只有一个名为aggregate_mean 的函数。
在myexample-package 文件夹旁边,有一个tests 文件夹,其中包含一个名为mytest.R 的测试文件,用于运行aggregate_mean 函数,如下所示:
mymat <- cbind(matrix(rexp(100), 10), IN=c(rep(1,2), rep(2,3), rep(3,2), rep(4,1), rep(5,2)))
mymat
mynewmat <- myexample::aggregate_mean(mymat, "IN")
mynewmat
我总是遇到错误:
lapply 中的错误(.SD,平均值):找不到对象“.SD”
谢谢!
【问题讨论】:
-
你可以从
data.tableimport.SD -
让我试试...但我已经做了
import(data.table),它应该导入所有data.table函数...我不应该在上面做importFrom(data.table, .SD)对吗? -
不,但我从你的问题中了解到你不喜欢 import(data.table) 和 Depends: data.table
-
在
NAMESPACE文件中使用import(data.table)和在DESCRIPTION文件中使用Imports: data.table就足够了
标签: r data.table package