簡體   English   中英

如何自動將函數加載到 R 包的命名空間中

[英]How to automatically load functions into namespace of an R package

我有一個 R 包,它需要來自其他幾個包的函數在命名空間中。 使用 roxygen2 文檔,我已經成功安裝了這些包(即install.packages(dplyr) ),但我無法自動加載它們(即library(dplyr) )。

這是我的描述文件:

Package: pkgname
Title: What the Package Does (one line, title case)
Version: 0.0.0.9000
Authors@R: person("First", "Last", email = "email@example.com", role = c("aut", "cre"))
Description: What the package does (one paragraph).
Depends: R (>= 3.5.2)
Imports:
  ggplot2,
  zoo,
  tidyr,
  dplyr,
  magrittr
Suggests:
  RColorBrewer
License: What license is it under?
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.1.1

在需要來自 magrittr 的管道函數的我的一個函數的文檔末尾,我包含了以下符號:

#' @importFrom magrittr %>%
#'
#' @export
funName <- function(...) { 
... 
} 

另一個功能:

#' @import ggplot2
#' @importFrom magrittr %>%
#'
#' @export
funName2 <- function(...) {
...
}

這成功地顯示在我的 NAMESPACE 文件中:

# Generated by roxygen2: do not edit by hand

export(funName2)
export(funName)
import(ggplot2)
importFrom(magrittr,"%>%")

然而,盡管在 roxygen2 注釋中添加了符號並且我的 NAMESPACE 文件中的腳本正確,我仍然必須在每個新的 R 會話中使用library(package-name)加載包ggplot2magrittr 我希望dplyrtidyrzoo這個要求(因為我沒有明確加載這些,只需安裝它們),但我沒有ggplot2%>%運算符。 我是否錯誤地導入了它們?

你永遠不應該在你的包函數中使用library(package.name) 而是使用package.name::function.name() 您需要重新導出magrittr管道操作符:

1- 將magrittr放入描述文件(如您所做的那樣)

2- 使用以下__imports.R文件創建到包R/目錄中:

#' re-export magrittr pipe operator
#'
#' @importFrom magrittr %>%
#' @name %>%
#' @rdname pipe
#' @export
NULL

或者,就像哈德利·威克姆所說的那樣

#' Pipe operator
#'
#' @name %>%
#' @rdname pipe
#' @keywords internal
#' @export
#' @importFrom magrittr %>%
#' @usage lhs \%>\% rhs
NULL

我認為你可以在必要時對其他進口做同樣的事情。 盡可能多地使用@importFrom ,否則重新導出它。

嘗試運行以下命令將您的包放入 NAMESPACE

devtools::document()

運行后,所有導入的 (@import) 包都將插入到 NAMESPACE 中。

希望能幫助到你 ;)

暫無
暫無

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

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