[英]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 種方式做到這一點:
ggplot2::aes()
。 這是我的首選方法,因為它不會在您的NAMESPACE
中添加任何額外內容,避免任何名稱沖突,並且在您以后返工或移除 function 時避免損壞。#' @importFrom ggplot2 aes
放在使用它的 function 上方的 roxygen 塊中來做到這一點。 將您需要的許多 function 名稱添加到該行。 之后,您可以直接使用aes()
而無需使用ggplot2::aes()
指定它來自的命名空間。 如果您使用很多函數(例如使用 ggplot2),這可能會很方便,但我建議通常使用第一個選項來保持 NAMESPACE 更整潔。 對於任何 function,從技術上講,您只需要在 package 中包含一次 @importFrom 行,但我建議將其包含在使用導入函數的每個 function 中。 這樣,如果您返工或移除 function,其他功能不會中斷。#' @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.