R:在自行编写的软件包中使用magrittrpipe道操作员

我想使用我自己写链来链接dplyr数据转换的包中的magrittr包中引入的pipe道运算符%>%magrittrDESCRIPTION文件中被列为Import 。 加载我自己的包并testing使用pipe道运算符的函数后,我得到以下错误信息:

函数名错误(参数::找不到函数“%>%”

在函数源代码magrittr::%>%更改为magrittr::%>%也无济于事,因为无法再构build该包。

如果你把magrittr列在Depends它应该可以正常工作。 但是,这并不build议 。 相反,您将magrittr留在Imports ,并将以下行添加到NAMESPACE

 importFrom(magrittr,"%>%") 

我build议阅读Writing R扩展 。 您的问题在第1.1.3和1.5.1段中介绍。

一个额外的解决scheme – 使用roxygen包。 它是作为devtools包的一部分实现的。 一旦安装了devtools ,调用devtools::document()就会为你更新NAMESPACE 。 它还自动生成.Rd文件,这是很方便的。

你所要做的就是以#' @import packagename import #' @import packagename的格式添加一个特殊的注释到一个文件中,从这个包中导入所有的函数,或者#' @importFrom packagename functionname来导入一个函数。 您可以根据需要在文件中包含尽可能多的这些注释,因此您可以在每个文件的顶部或每个需要外部函数的函数中拥有一组注释。

然后运行devtools::document() ,它parsing你的代码寻找这些注释,然后为你创build一个合适的NAMESPACE文件。 简单。

假设你正在使用RStudio,Hadley的devtools包,并在DESCRIPTION文件的Imports部分列出了magrittr ,下面是我在包函数中使%>%工作的步骤。

首先写函数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/目录中创build,您的function应该按预期工作。