2017-08-16 71 views
1

我的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不會接受它。 –

回答

2

我認爲你誤解了這個評論,儘管它很容易做到,因爲邏輯不清晰和無可爭議。

在第一段談到使用require(package)調用軟件包時,他們表示測試環境或小插圖可以正常工作,但不能在完成的函數中使用library(package)require(package)

這被認爲是不好的形式,因爲你在一個函數內調用的包會篡奪用戶在加載包時在其工作環境中設置的訪問順序。

的方法你上述使用方法:

package::function()

被批准的方式來使用函數中的一個函數不改變當前的環境。

但爲了使用,您必須仍然有你的當前機器上或者在您的當前工​​作環境的安裝包,它的功能(如的virtualenv或IPython中或jupytr..and是R將在所有這些環境中工作)。

您不能運行R無法從工作環境中看到的函數...所以您必須安裝它,但不一定要加載它來調用它。

相關問題