簡體   English   中英

使用其他包中的功能 - 何時使用 package::function?

[英]Using functions from other packages - when to use package::function?

在為 R 制作自己的 package 時,通常希望使用不同 package 的功能。 也許它是一個繪圖庫,如ggplot2dplyr或一些小眾 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甚至從statsbase package 中屏蔽功能。 (並且 tidyverse 繼續在我們的命名空間中產生越來越多的條目。如果您不知道使用dyplr ,如果您今天使用的base function 將被未來版本的dplyr掩蓋,從而導致您的意外運行時問題package 未來。)

如果您使用::變體,所有這些都沒有問題。 如果在您的 package 中打開的最后一個 package 是您的意思,那么所有這些都不是問題。

require (或library )變體導致整體代碼更短,很明顯,在代碼中的什么時間和位置,不可用的 package 問題將導致錯誤並因此變得可見。

一般來說,兩者都運作良好,您可以自由選擇,這些公認的微小差異對您來說似乎更重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM