簡體   English   中英

R:如何在我的 package 中正確包含庫

[英]R: how to properly include libraries in my package

我正在編寫第一個 R-Package 並且想知道包含其他庫的正確方法是什么,例如ggplot2 所以在我的package中有兩個地方可以導入語句go。 DESCRIPTION文件和NAMESPACE ,后者需要在一些 roxagen 語句中包含 ggplot ,例如#'@import ggplot2

Actually I thought that is is enough to include ggplot2 inside DESCRIPTION, as I thought that loading my packages will also load or dependencies, however, when ggplot2 is not in the namespace it seems like I cannot use function, eg aes, ggplot without writing ggplot2::aes or ggplot2::gpplot 那么每個配置文件中的導入語句是什么,即DESCRIPTION和NAMESPACE?

所需的一個步驟是在您的DESCRIPTION文件中的Imports:下包含ggplot2 這可確保在安裝 package 時安裝 ggplot2。

然后,要在 package 中使用 ggplot2 中的函數,您需要告訴 R 在哪里尋找它們。 您可以通過 3 種方式做到這一點:

  1. 使用時將 package 的名稱放在 function 名稱之前: ggplot2::aes() 這是我的首選方法,因為它不會在您的NAMESPACE中添加任何額外內容,避免任何名稱沖突,並且在您以后返工或移除 function 時避免損壞。
  2. 使用時導入特定功能。 通過將#' @importFrom ggplot2 aes放在使用它的 function 上方的 roxygen 塊中來做到這一點。 將您需要的許多 function 名稱添加到該行。 之后,您可以直接使用aes()而無需使用ggplot2::aes()指定它來自的命名空間。 如果您使用很多函數(例如使用 ggplot2),這可能會很方便,但我建議通常使用第一個選項來保持 NAMESPACE 更整潔。 對於任何 function,從技術上講,您只需要在 package 中包含一次 @importFrom 行,但我建議將其包含在使用導入函數的每個 function 中。 這樣,如果您返工或移除 function,其他功能不會中斷。
  3. 您可以通過將#' @import ggplot2放在 roxygen 塊中來導入整個 package 函數。 這會從 package 導入每個 function。 這對於像 ggplot2 和 dplyr 這樣的大包來說可能很多,並且可能會導致問題,所以我建議永遠不要這樣做,而只導入您需要的特定函數或使用ggplot2::aes()調用它們:

如果您依賴 package,您應該將其放在說明文件的Imports字段中,之后您可以在代碼中使用pkgname::function() usethis::use_package() function 可以幫助您做到這一點。

如果您希望您的代碼能夠在不使用::的情況下使用 package 的任何代碼,您應該在以下位置添加 roxygen 注釋:

#' @import pkgname
NULL

然后由 roxygen2 將其移植到您的 NAMESPACE 文件中。

如果您想專門使用某些功能(但不是其他功能),您可以使用 roxygen2 使用的以下功能:

#' @importFrom pkgname fun1 fun2
NULL

usethis::use_import_from() function 可以幫助您完成上述工作。 在上面的示例中, NULL僅表示您沒有記錄 function 或數據,您可以在文檔注釋塊的末尾使用它。

暫無
暫無

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

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