【发布时间】:2016-09-01 11:16:12
【问题描述】:
我的行为对我来说毫无意义,有人可以解释以下行为
我创建了2个包A,B
A 依赖于data.table 并定义了函数readFile
B 依赖于A 并定义了函数useFile
useFile <- function(path){
DT <- readFile(path)
print(class(DT))
return(DT[x == 'a'])
}
当我这样做时
library(A)
library(B)
useFile(myFile)
我看到 DT 是来自 print 语句的 data.table,但它崩溃说 object x not found(当然 data.table 有一个 x 列)
现在,当我也使 B 依赖于 data.table 时,它工作正常!
有人能解释一下这种行为吗,我认为当调用library(A) 时所有的data.tableness 都应该在那里!!
PS:我知道我应该提供可复制的,但我们这里拿了 2 个包,如果没有明显的答案,我会在网上上传 2 个包
【问题讨论】:
-
Package data.table 通常应该在DESCRIPTION 文件中的Imports 中,并在您的第一个包的NAMESPACE 中导入。然后,您应该将第一个包导入到第二个包中,或者也将 data.table 导入那里。如果我是最新的,通常不再推荐依赖包而不是导入它们。
-
见stackoverflow.com/questions/10527072/… 你的错误状态是
Error in ``[.data.frame``(x, i, j) : object 'x not found -
@mnel:不是这条消息,但那是 pb 是的,尽管我使用 Rstudio 和 roxygen2 为我做所有事情。我猜 data.table 需要在我的情况下导入?
-
最重要的是,您必须将 data.table 导入包的命名空间。我认为你可以间接做到这一点,即将 data.table 的命名空间导入 package1 的命名空间,然后将 package1 的命名空间导入 package2 的命名空间,但我从未尝试过。使用 roxygen2 你可以做
@import data.table.
标签: r dependencies data.table r-package