在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]
要使其正常工作,唯一的方法是在data.table
文件的Depends:
字段中包含DESCRIPTION
,在import(data.table)
文件中包含NAMESPACE
。 / p>
现在,我希望能够从使用data.table
的程序包中调用该函数,如下所示:
mypackage::myfunction(...)
但是,出现以下错误:
lapply(.SD,均值)错误:找不到对象'.SD'
仅当我使用library()
加载程序包后调用函数时,此错误才会消失,如下所示:
library(mypackage)
myfunction(...)
由于我的程序包随后会从其他程序包中调用,是否有一种方法可以使我的程序运行而不必每次都使用library()
,就像我需要使用其他函数的其他程序包一样?
谢谢
编辑
我刚刚制作了一个MWE程序包,可重现该错误。请从下面的Google云端硬盘链接下载:
https://drive.google.com/open?id=1yHxmQeoIOx9VIuL4EBrFWlGDBstnKJQs
我使用usethis
软件包在usethis_myexample.R
文件中进行了构建。
该软件包本身称为myexample
,包含在myexample-package
文件夹中。在其中,您可以在DESCRIPTION
部分中看到data.table
文件包含Imports
,而NAMESPACE
文件包含import(data.table)
。
R文件夹内aggregate_mean
文件中只有一个名为functions.R
的函数。
在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'
谢谢!
答案 0 :(得分:4)
由于您的问题中现在有一个可重复的实例,所以我能够对其进行深入研究。
我从您的链接下载了zip文件,将其解压缩,将myexample-package
重命名为mypackage
。然后...
R CMD build myexample
R CMD INSTALL myexample_0.0.0.9000.tar.gz
R -q
然后在R。
mymat <- cbind(matrix(rexp(100), 10), IN=c(rep(1,2), rep(2,3), rep(3,2), rep(4,1), rep(5,2)))
mymat
# [1,] 0.83010264 0.4778802 1.15826121 0.304299143 0.5781483 1.81660550
# [2,] 0.03895798 2.3709480 0.69694839 0.730800823 0.3319984 0.53348461
# [3,] 0.03383199 0.2842029 1.74151827 1.019573035 0.1863635 0.89487309
# [4,] 0.53533254 0.2814782 0.78563371 0.309180422 1.4393098 1.07450638
# [5,] 0.53010142 1.3132409 0.67072292 1.212244007 0.1984360 0.06208641
# [6,] 0.45916016 0.5576434 0.67770401 0.056270575 0.5065829 0.83416626
# [7,] 0.25404953 0.2730706 0.01070633 0.132406274 1.6186573 0.37083771
# [8,] 3.42254715 0.6489950 0.81291881 0.003048744 1.3522848 0.18066361
# [9,] 1.29994319 0.3170614 1.71145805 1.141222719 1.1832478 0.18091907
#[10,] 0.23622615 0.4473482 3.07774816 1.441207092 0.9761152 0.28132707
# IN
# [1,] 6.1868517 2.44880203 0.55261438 0.3459453 1
# [2,] 0.8177218 0.90554629 1.00106158 1.0427756 1
# [3,] 4.3910329 0.56068780 0.24262243 1.7036666 2
# [4,] 0.8712083 0.02439399 0.80927766 1.6596570 2
# [5,] 0.6613734 0.12954737 1.01661648 1.2446795 2
# [6,] 0.2858442 2.32610958 0.26553789 0.4856818 3
# [7,] 3.6628536 0.26447698 0.70633274 2.0283399 3
# [8,] 0.0515666 0.99916985 0.06102821 0.9413485 4
# [9,] 4.7781407 1.47764414 1.92598562 0.4581395 5
#[10,] 0.8770661 2.78552022 0.07543095 0.6886183 5
mynewmat <- myexample::aggregate_mean(mymat, "IN")
mynewmat
# get V1 V2 V3 V4 V5 V6 V7
#1: 1 0.4345303 1.4244141 0.9276048 0.517549983 0.4550734 1.1750451 3.5022868
#2: 2 0.3664220 0.6263073 1.0659583 0.846999155 0.6080364 0.6771553 1.9745382
#3: 3 0.3566048 0.4153570 0.3442052 0.094338425 1.0626201 0.6025020 1.9743489
#4: 4 3.4225471 0.6489950 0.8129188 0.003048744 1.3522848 0.1806636 0.0515666
#5: 5 0.7680847 0.3822048 2.3946031 1.291214905 1.0796815 0.2311231 2.8276034
# V8 V9 V10 IN
#1: 1.6771742 0.77683798 0.6943604 1
#2: 0.2382097 0.68950553 1.5360010 2
#3: 1.2952933 0.48593531 1.2570109 3
#4: 0.9991699 0.06102821 0.9413485 4
#5: 2.1315822 1.00070829 0.5733789 5
所以我无法重现您的问题。如果问题出在安装软件包的方式中,则建议您按照上述相同的步骤进行操作,以缩小范围。 如果您还有其他跟进问题,而不是编辑问题,最好在我的答案下加上注释。
希望有帮助!