我想在我自己编写的一个程序包中使用%>%该magrittr程序包中引入的管道运算符来链接dplyr数据转换。在文件中magrittr列出。加载我自己的包并测试使用管道运算符的功能后,我收到以下错误消息:ImportDESCRIPTION
函数名错误(参数,:找不到函数“%>%”
更改%>%为magrittr::%>%函数源代码也无济于事,因为无法再构建软件包。
我想在我自己编写的一个程序包中使用%>%该magrittr程序包中引入的管道运算符来链接dplyr数据转换。在文件中magrittr列出。加载我自己的包并测试使用管道运算符的功能后,我收到以下错误消息:ImportDESCRIPTION
函数名错误(参数,:找不到函数“%>%”
更改%>%为magrittr::%>%函数源代码也无济于事,因为无法再构建软件包。
Answers:
如果您已在中magrittr列出,它应该可以正常工作Depends。但是,不建议这样做。相反,您留magrittr在其中Imports,并将以下行添加到NAMESPACE:
importFrom(magrittr,"%>%")
我建议阅读Writing R扩展。您的问题在1.1.3和1.5.1段中讨论。
roxygen2,则可以添加#' importFrom magrittr "%>%"以在期间自动填充NAMESPACE roxygenize()。
#' @importFrom magrittr "%>%"
现在,有一种更简单的方法可以在包装中支撑管道。精美的包装usethis具有功能use_pipe()。您只需运行一次该函数即可处理所有内容。这是use_pipe()在usethis文档中描述功能的方式:
是否需要进行设置才能在包中内部使用magrittr的管道并为包用户重新导出:
将magrittr添加到DESCRIPTION中的“导入”
使用必要的制氧模板创建R / utils-pipe.R
use_pipe()代码行添加到用于生成软件包的代码中?例如,我运行:usethis::use_description(usethis_description); usethis::use_build_ignore(directories); usethis::use_build_ignore(paste0(pkg_name, ".Rproj")); if (file.exists(file.path(pkg_path, "NAMESPACE"))) { file.remove(file.path(pkg_path, "NAMESPACE")) }; devtools::document(pkg_path); devtools::check(pkg_path); devtools::load_all(pkg_path); devtools::install(pkg_path)。我只是use_pipe()在开始添加吗?
usethis在开发软件包时只使用一次功能。然后,这些功能将必要的部分添加到构建说明及其他所有内容中。
另一种解决方案-使用roxygen包装。它作为devtools软件包的一部分实现。一旦devtools被安装,调用devtools::document()将更新NAMESPACE为您服务。它还使用文档自动构建.Rd文件,非常方便。
您要做的就是以格式添加特殊注释#' @import packagename到文件中,以从该包中导入所有功能或#' @importFrom packagename functionname导入功能。您可以在文件中根据需要添加任意数量的这些注释,因此可以在每个文件的顶部或每个需要外部功能的函数中使用一组注释。
然后运行devtools::document(),它解析代码以查找这些注释,然后NAMESPACE为您创建一个适当的文件。简单。
假设您使用的是RStudio(Hadley的devtools软件包),并且已magrittr在DESCRIPTION文件的Imports(导入)部分列出,请按照以下步骤操作%>%软件包功能。
一,写功能foo.R:
#' Convert \code{data.frame} to \code{list}.
#'
#' @importFrom magrittr %>%
#' @name %>%
#' @rdname pipe
#' @export
#' @param x A \code{data.frame} object.
#' @examples
#' my_result <- foo(iris)
#'
foo <- function(x) {
x %>%
as.list()
}
第二,运行devtools::document()。
第三,运行devtools::load_all()。
类似的文件这会在你创建R/的目录,并按照预期的功能应该工作。
@name %>%这里的目的是什么?