如何在我的 R 函数中使用特定于平台的包

How to use a platform specific package in my R function

我的 R 包有一个函数 (my_func),它使用另一个包 (foo) 中的函数 (bar),它只在 Unix 上可用。所以我按照 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 并且警告消失了,但是随后无法在 windows 上安装软件包,因为 foo 不适用于 win。

我认为你误读了那条评论,虽然这很容易做到,因为逻辑不清晰且无可辩驳。

在讨论使用 require(package) 调用包的第一段中,他们说测试环境或小插图是可以的,但在完成的函数内部使用 library(package)require(package).

这被认为是错误的形式,因为您在函数内调用的包将篡夺您的用户在加载包时在其工作环境中设置的访问顺序。

您上面使用的方法:

package::function()

是在不改变当前环境的情况下在一个函数中使用一个函数的方式被批准。

但为了使用该功能,您仍然必须在当前机器或当前工作环境(例如 virtualenv 或 ipython或 jupytr.. 是的,R 将在所有这些环境中工作)。

您不能 运行 R 在工作环境中看不到的函数...因此您必须安装它,但不一定要加载它才能调用它。