未附加名称空间时的R包依赖性问题

时间:2012-05-11 22:21:49

标签: r cran

我一直认为在'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)

现在为了进一步复杂化,似乎这个问题被继承到 Imports 的任何'孙子'包,在这种情况下是lasso.stars函数。我很难找到一个很好的例子,但我相信他们在那里。

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

1 个答案:

答案 0 :(得分:2)

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