[英]Using functions from other packages - when to use package::function?
在為 R 制作自己的 package 時,通常希望使用不同 package 的功能。 也許它是一個繪圖庫,如ggplot2
、 dplyr
或一些小眾 function。
但是,在制作依賴於其他包中的函數的 function 時,調用它們的合適方法是什么? 特別是,我正在尋找何時使用的示例
myFunction <- function(x) {
example_package::function(x)
}
或者
require(example_package)
myFunction <- function(x) {
function(x)
}
我什么時候應該使用其中一種?
如果您實際上是在創建 R package(與源腳本相反,R 項目或其他方法require()
,您應該永遠不要使用library()
。 這不是使用package::function()
的替代方法。 您實際上是在package::function()
和function()
之間進行選擇,正如@Bernhard 所強調的那樣,明確調用 package 可確保兩個或多個包中存在沖突名稱時的一致性。
而不是require(package)
,您需要擔心正確定義您的 DESCRIPTION 和 NAMESPACE 文件。 在 SO 和其他地方有很多關於此的帖子,所以不會 go 詳細介紹,例如參見此處。
如果您使用roxygen2
生成 package 文檔,則使用package::function()
可以幫助解決上述問題(它將自動生成正確的 NAMESPACE 文件。
雙冒號變體::
在極少數情況下具有明顯優勢,當兩個包使用相同的 function 名稱時。 有一個 function psych::alpha
來計算 Cronbach 的 alpha 作為內部一致性的度量,還有一個 function scales::alpha
來修改顏色透明度。 沒有那么多例子,但話又說回來,有例子。 dplyr
甚至從stats
和base
package 中屏蔽功能。 (並且 tidyverse 繼續在我們的命名空間中產生越來越多的條目。如果您不知道使用dyplr
,如果您今天使用的base
function 將被未來版本的dplyr
掩蓋,從而導致您的意外運行時問題package 未來。)
如果您使用::
變體,所有這些都沒有問題。 如果在您的 package 中打開的最后一個 package 是您的意思,那么所有這些都不是問題。
require
(或library
)變體導致整體代碼更短,很明顯,在代碼中的什么時間和位置,不可用的 package 問題將導致錯誤並因此變得可見。
一般來說,兩者都運作良好,您可以自由選擇,這些公認的微小差異對您來說似乎更重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.