11

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

问题出现如下:假设有一个包'Child',它依赖,但没有显式导入一个名为'Parent'的包,并且包含一个调用'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 包的名称空间导入到子包名称空间中,那么这个问题似乎很容易避免。

4

1 回答 1

2

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

于 2012-05-13T21:14:50.163 回答