r - 如何自动将函数加载到 R 包的命名空间中

标签 r namespaces rstudio devtools roxygen2

我有一个 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 文件中添加了正确的脚本,我仍然需要加载包 ggplot2magrittr使用 library(package-name)在每个新的 R session 中。我希望对 dplyr 有此要求, tidyrzoo (因为我没有明确加载这些,只需安装它们),但我没有为 ggplot2%>%运算符(operator)。我是否错误地导入了它们?

最佳答案

你永远不应该使用 library(package.name)在你的包函数中。而是使用 package.name::function.name() .
您需要重新导出 magrittr管道运算符(operator):

1- 放 magrittr进入描述文件(就像你所做的那样)

2- 制作 __imports.R文件到包 R/包含以下几行的目录:

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

或者,类似地做 哈德利·威克姆 says :
#' Pipe operator
#'
#' @name %>%
#' @rdname pipe
#' @keywords internal
#' @export
#' @importFrom magrittr %>%
#' @usage lhs \%>\% rhs
NULL

我认为你可以在必要时对其他进口做同样的事情。使用 @importFrom尽可能多,否则重新导出。

关于r - 如何自动将函数加载到 R 包的命名空间中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57618769/

相关文章:

c++ - 命名空间中的类名冲突

r - Rmarkdown-运行代码并在文档中显示错误

r - 无法在 RStudio 中安装 devtools -- 找不到依赖项 (xml2/rversions)

r - 从多个节点检测核心

r - R 中是否有一个函数可以将 OR 向上舍入为整数?

php - 在 PHP 中包含所有命名空间并仅使用类名访问类是否不好?

java命名空间冲突

r - 不使用命令行从 RStudio 初始化 GitHub 存储库

r - 根据其他数据框中的两列过滤数据框

r - 相关图阵列