R:在我自己的包中使用数据表:Lappy(.SD,mean)中出错:找不到对象'.SD'

R:在我自己的包中使用数据表:Lappy(.SD,mean)中出错:找不到对象'.SD',r,data.table,package,R,Data.table,Package,接下来,我构建了自己的包,它使用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]

接下来,我构建了自己的包,它使用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]
但是,我得到以下错误:

Lappy.SD中出错,意思是:找不到对象'.SD'

只有在使用库加载包后调用函数时,此错误才会消失,如下所示:

mypackage::myfunction(...)
library(mypackage)
myfunction(...)
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
由于我的包随后会从其他包中调用,有没有一种方法可以让它工作,而不必每次都使用库,就像我需要从其他包中调用函数一样? 谢谢

编辑

我刚刚制作了一个MWE包,它复制了错误。请从下面的Google Drive链接下载:

我在usethis_myexample.R文件中使用usethis包来构建它

包本身称为myexample,包含在myexample包文件夹中。在其中,您可以看到导入部分中的描述文件包含data.table,命名空间文件包含importdata.table

R文件夹中的functions.R文件中只有一个名为aggregate_mean的函数

在myexample包文件夹旁边,有一个tests文件夹,其中有一个名为mytest.R的测试文件,用于运行聚合函数,如下所示:

mypackage::myfunction(...)
library(mypackage)
myfunction(...)
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
我经常遇到这样的错误:

Lappy.SD中出错,意思是:找不到对象'.SD'


谢谢

因为你的问题中有一个可重复的例子,所以我能够深入研究

我从你的链接下载了zip文件,解压后将myexample包重命名为mypackage。然后

R CMD build myexample R CMD安装myexample_0.0.0.9000.tar.gz R-q 然后在R


mymat因为你的问题中有一个可重复的例子,所以我能够深入研究它

我从你的链接下载了zip文件,解压后将myexample包重命名为mypackage。然后

R CMD build myexample R CMD安装myexample_0.0.0.9000.tar.gz R-q 然后在R


mymat您可以从data.Table导入.SD让我试试。。。但是我已经导入了data.table,它应该导入所有的data.table函数。。。我不应该在上面做importFromdata.table、.SD?不,但我从你的问题中了解到你不喜欢做importdata.table,并且依赖于:data.table在名称空间文件中使用importdata.table应该足够了,在描述文件中使用Imports:data.table你可以从data.table导入.SD让我试试。。。但是我已经导入了data.table,它应该导入所有的data.table函数。。。我不应该在上面做importFromdata.table、.SD?不,但我从你的问题中了解到你不喜欢做importdata.table,并且依赖于:data.table在名称空间文件中使用importdata.table,在描述文件中使用Imports:data.table应该足够了哦,真的吗?按原样使用我的软件包您没有收到错误?我用RStudio构建和安装,这有什么不同吗?@DaniCee是的,它有不同。RStudio是R的接口。当使用data.table时,是否不鼓励使用RStudio构建包?不知道。我确实将RStudio与data.table结合使用,但现在我不使用它来构建包,而是只编辑代码。在过去,我在构建与data.table无关的包时遇到了多个不同的问题,我浪费了足够多的时间才不再尝试。我不使用.Rproj文件,它们不是R的一部分,R没有以任何方式使用它们。它们仅由RStudio或某些RStudio软件包(如usethis、devtools等)使用。哦,真的吗?按原样使用我的软件包您没有收到错误?我用RStudio构建和安装,这有什么不同吗?@DaniCee是的,它有不同。RStudio是R的接口。当使用data.table时,是否不鼓励使用RStudio构建包?不知道。我确实将RStudio与data.table结合使用,但现在我不使用它来构建包,而是只编辑代码。在过去,我在构建与data.table无关的包时遇到了多个不同的问题,我浪费了足够多的时间才不再尝试。我不使用.Rproj文件,它们不是R的一部分,R没有以任何方式使用它们。它们仅由RStudio或某些RStudio软件包(如usethis、devtools等)使用。。