【问题标题】:Error in package depending on another package that depends on data.table包中的错误取决于另一个依赖于 data.table 的包
【发布时间】: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.
  • 可能duplicate

标签: r dependencies data.table r-package


【解决方案1】:

为了确定,添加 Depends: data.table in DESCRIPTION 到所有使用data.table 的包,即使他们使用的其他包已经使用data.table

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多