【问题标题】:R package dependency issues when namespace is not attached未附加命名空间时的 R 包依赖性问题
【发布时间】:2012-05-11 22:21:48
【问题描述】:

我一直认为在 'Depends' 字段中有一个包会自动导入 命名空间。但是,似乎在 R 2.15 中,依赖项直到包实际附加到搜索路径后才可用。这是预期的行为吗?

问题出现如下:假设有一个包'Child',它依赖,但没有显式导入一个名为'Parent'的包并包含一个函数调用“父”命名空间中的对象。那么当这个函数在没有实际附加'Child'的情况下被调用时,'Parent'中的函数就找不到了。

这里有一个来自bigdata 包手册的示例,但问题非常普遍:

x = matrix(rnorm(50*80),50,80)
beta = c(3,2,1.5,rep(0,77))
y = rnorm(50) + x%*%beta
z1 = bigdata::lasso.stars(x,y)

该示例失败,因为 lasso.stars 依赖于 'glmnet',直到附加 bigdata 才会加载。能够调用lasso.stars 的唯一方法是实际附加bigdata 包:

library(bigdata)
z1 = bigdata::lasso.stars(x,y)

现在让事情变得更复杂,似乎这个问题被继承到任何“孙子”包,在这种情况下导入 lasso.stars 函数。我很难找到一个很好的例子,但我相信他们就在那里。

这是一个错误吗?我知道可以通过要求包作者使用 Imports 而不是 Depends 来避免这种情况,但实际上 CRAN 上的大多数包仍然使用 Depends。如果 R 会自动将任何 Depends 包的名称空间导入到子包名称空间中,似乎很容易避免该问题。

【问题讨论】:

  • +1 好问题。这是我自己想过的,但推迟了,认为在 R-devel 上提出可能会更好(因为我认为 R-core 成员是唯一能解决这个问题的人)。他们肯定讨论过,但我快速搜索了几次,并没有看到任何提及,这似乎很奇怪......
  • @Jeroen,您能否提供示例?当我尝试library(xts)时,会自动加载zoo的导出功能。
  • @kohske 示例在主题中。 xts 包有一个 NAMESPACE 文件,它从 zoo 手动导入所需的函数。因此它不存在我认为的问题。
  • 你说的是random包吗?但我在random 包中找不到bigdata 的依赖项。
  • 我想这不是一个错误。为什么不library(bigdata)?有什么原因吗?

标签: r cran


【解决方案1】:

对于那些感兴趣的人,讨论继续在 r-devel 邮件列表上here

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 2018-04-27
    • 2013-02-04
    相关资源
    最近更新 更多