如何在我的R功能中使用特定于平台的软件包

问题描述:

我的R软件包具有使用另一个软件包(foo)中的函数(bar)的函数(my_func),该函数只能在Unix上使用。所以,我写我的代码这样,继suggested packages in Writing R extension如何在我的R功能中使用特定于平台的软件包

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不适用于win,所以无法在Windows上安装该软件包。

+0

为什么要在Windows上安装该软件包,如果它只需要unix中的函数? –

+0

@qqq因为否则,bioconductor不会接受它。 –

我认为你误解了这个评论,尽管它很容易做到,因为逻辑不清晰和无可争议。

在第一段谈到使用require(package)调用软件包时,他们表示测试环境或小插图可以正常工作,但不能在完成的函数中使用library(package)require(package)

这被认为是不好的形式,因为你在一个函数内调用的包会篡夺用户在加载包时在其工作环境中设置的访问顺序。

的方法你上述使用方法:

package::function()

被批准的方式来使用函数中的一个函数不改变当前的环境。

但为了使用,您必须仍然有你的当前机器上或者在您的当前工​​作环境的安装包,它的功能(如的virtualenv或IPython中或jupytr..and是R将在所有这些环境中工作)。

您不能运行R无法从工作环境中看到的函数...所以您必须安装它,但不一定要加载它来调用它。