我的R包有一个函数(my_func
),它使用另一个只在Unix上可用的包(bar
)的函数(foo
)。所以我按照suggested packages in Writing R extension:
my_func = function(){
....
if (requireNamespace("foo", quietly = TRUE)) {
foo::bar(..) # also tried bar(...)
} else {
# do something else without `bar`
}
...
}
但是,当我运行R CMD检查时,我一直收到这样的警告信息:
'loadNamespace'或'requireNamespace'调用未从:foo
声明有没有办法使用平台特定的包而不发出这样的警告?我尝试在说明文件中包含foo
并且警告消失了,但是由于foo
无法获得胜利,因此无法在Windows上安装该软件包。
答案 0 :(得分:2)
我认为你误解了这个评论,虽然这很容易做到,因为逻辑不明确且无可争议。
在第一段中谈到使用require(package)
调用包时,他们说测试环境或插图没有问题,但是在完成的函数中没有使用library(package)
或require(package)
。
这被认为是不好的形式,因为您在函数内调用的包将篡夺用户在加载包时在其工作环境中设置的访问顺序。
您在上面使用的方法:
package::function()
是批准在函数内使用函数而不改变当前环境的方法。
但是为了使用该功能,您必须在当前机器上或当前的工作环境中安装该软件包(例如virtualenv或ipython或jupytr ..并且是的R将在所有这些环境。)
您无法运行R无法从工作环境中看到的功能...因此您必须安装它,但不一定要加载它来调用它。