2017-09-18 51 views
0

我正在開發的R包凡這是在DESCRIPTIONS文件如何加載R包中的依賴關係?

Imports: 
    dplyr, 
    ggplot2, 
    ncdf4 

可我有,我用第三依賴

testFun <- function(file, lat, long){ 
    ncfname <- file.path(file,fsep = .Platform$file.sep) 
    xfile <- nc_open(ncfname) #Opens the NetCDF file 
    lat <- ncvar_get(xfile, 'lat') #Extracts all latitudes 

    ...Calculations 

    return(XYZ) 
} 

當我Build and Reload包爲例功能,和我運行該功能,它could not find function "nc_open"

,但它的工作原理,當我和ncdf4::nc_open

更換我應該前綴packagename::到每個依賴我在代碼中使用?或者我錯過了什麼?

通常,我希望從DESCRIPTIONS安裝所有依賴關係,並且它的函數可供使用,而不需要每次都需要包前綴。

回答

0

最簡單的方法和最正確的方法是直接從包中取出你的函數,而不用打開任何可能會抹殺某人當前環境的包。

試試這個:

xfile <- ncdf4::nc_open(ncfname) 

應該獲得你所需要的沒有衝突。這是當前首選的方法,因爲它會爲用戶找到它們。這也讓人們很容易知道他們應該去探索的事情。

+0

是的......這是正確的方式 – sconfluentus

+0

如果可能,我想這是一個參考。它是否可用於任何文檔?看起來很麻煩,雖然比較安全。 – maximusdooku

+0

轉到Hadley WIckam的網站http://r-pkgs.had.co.nz/namespace.html它明確指出,除非你使用大部分的包(就像許多數據庫包的功能OVER DBI一樣):::是首選。 – sconfluentus

1

或者:

  • 明確前綴它的包裝功能:ncdf4::nc_open(...)

或者:

  • 在空間文件importFrom(ncdf4, nc_open)添加一行,然後在你的代碼,請在沒有包裝的情況下調用該功能:nc_open(...)

您可以使用import(ncdf4)來打包該包中的所有內容,而不是爲要導入的每個函數添加一個importFrom行。

+0

我認爲明確的前綴甚至可以幫助代碼清晰。所以我會保持簡單並堅持下去。我不想保留另一個進口清單。 – maximusdooku

+0

對於每個函數,您不需要'importFrom()',每個包只需要一個'importFrom(ncdf4,nc_open,nc_close,nc_foo,nc_bar)'。 –

+0

啊,謝謝!這聽起來很有用...... – maximusdooku