我一直认为在'Depends'字段中有一个包也会自动导入 namespace 。但是,似乎在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包的 namespace 自动导入到子包 namespace ,则似乎很容易避免该问题。

最佳答案

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

关于未附加 namespace 时的R包依赖关系问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10559350/

10-12 17:11