[英]Use dependencies in R packages through library() / Description file
我正在寫一個 R 包,它有幾個其他包的依賴關系,其中一些在 CRAN 中可用,其他的是自制的。
根據幫助, library("my_package")
將在我之前安裝包后加載包的命名空間,即install.package("my_package")
。
盡管如此,一旦我安裝了包,我就可以通過my_package::my_function()
使用已安裝但未加載包的所有功能,所以如果我的包有依賴項,除了將它們添加到DESCRIPTION
文件中:
Imports:
dplyr,
my_package2,
ggvis,
在包文件夾的根目錄中。 我是否必須通過library()
加載新包的依賴項,或者如果最終用戶沒有在他的計算機上安裝,因為在導入部分指定了所需的包,最終用戶將看到一個錯誤?
不,用戶不必加載my_package
中函數使用的包。
事實上,您在Imports:
下列出了一個包,在DESCRIPTION
文件中意味着在安裝my_package
期間,R 將檢查該包在您的系統上是否可用。 這意味着my_package
中的函數可以按照您的建議使用::
表示法使用這些包中的函數。
使用::
表示法是引用其他包中函數的推薦方法,但也有其他選項:
為了使dplyr
中的所有功能無需::
in my_package
即可訪問,您可以將import(dplyr)
添加到NAMESPACE
文件中。 如果您使用一個包中的許多函數,這很方便。
如果您打算只使用函數select
from dplyr
,您可以將importFrom(select, dplyr)
添加到NAMESPACE
文件中。
您還可以將包添加到Depends:
下的DESCRIPTION
文件中。 這意味着當您使用library(my_package)
時,包被加載到全局環境中。 這幾乎從來都不是一個好的解決方案。
依賴關系的一般想法是 R 是my_package
將具有它依賴加載的包的“它自己的版本”。 因此,您始終可以確定,例如,您將按照您的預期使用dplyr
包中的函數select()
。 例外是Depends:
的使用繞過了這個系統。 在這種情況下, my_package
將在全局環境中查找函數,如果有人應該在全局環境中定義了一些名為select()
的函數, my_package
將使用該函數,您將得到意想不到的結果。
示例 1:
DESCRIPTION
文件:
Imports:
dpylr
來自my_package
的一些功能:
my_fun <- function(...) {
dplyr::mutate(...) %>%
dplyr::select(1:3)
}
示例 2:
DESCRIPTION
文件:
Imports:
dpylr
NAMESPACE
文件:
import(dplyr)
來自my_package
的一些功能:
my_fun <- function(...) {
mutate(...) %>%
select(1:3)
}
示例 3:
DESCRIPTION
文件:
Imports:
dpylr
NAMESPACE
文件:
importFrom(dplyr,select)
來自my_package
的一些功能:
my_fun <- function(...) {
dpylr::mutate(...) %>%
select(1:3)
}
您可以在網絡上的 R 包中找到有關如何處理依賴項的更詳細說明。 例如,以下內容很有用:
此外,不必手動編寫NAMESPACE
文件。 你可以讓roxygen2
為你做這件事。 閱讀文檔以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.