我目前正在构建一个包,并想知道是否有一种方法可以在不实际加载dplyr包的情况下调用dplyr中的%>%
运算符。例如,对于任何从包中导出的函数,您都可以使用双冒号(::
)调用它。因此,如果我想在不附加dplyr的情况下使用group_by
函数,则应输入dplyr::group_by
。那么操作符是否也有类似的方法呢?
`%>%` <- magrittr::`%>%`
这将在您当前的环境中定义%>%
运算符。例如:
iris %>% head
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
最简单的方法是加载magrittr
包,它只用于管道操作,并且是%>%
的原始源代码。如果您不想加载任何软件包,则仍然可以使用%>%
,但不会有任何真正有用的方式(除非您按照Andrie的建议在环境中定义它)。使用它和::
结合使用的方法如下:
# standard use
mtcars %>% summary()
# :: use
magrittr::"%>%"(mtcars, summary())
使用这种方法,你真的失去了可读性和不嵌套的任何优势。
既然你说你正在构建一个包,你应该将magrittr
放在Imports中,甚至只需要使用importsFrom并获取"%>%"
函数。有关更多信息,请参见此处。
dplyr::`%>%` # Note the backticks, although quotes work as well.
这会显示代码,但底部你将看到它的环境实际上是'dplyr'导入的'magritter'的NAMESPACE。正如其他两位知识渊博的回答者所指出的那样,有几种方法可以将其用作函数,尽管除非你制作具有两侧“%”的本地副本或使用函数括号调用它,否则不能将其置于lhs
和rhs
参数之间。R解析器不允许:
> mtcars dplyr::"%>%" summary()
Error: unexpected symbol in " mtcars dplyr"
在dplyr中实现的管道符号和双冒号符号之间似乎存在冲突。我在文档中没有找到任何相关信息。
## This works:
base::mean(1:10)
## This doesn't:
1:10 %>% base::mean
## It works after parenthesizing though:
1:10 %>% (base::mean)
文档中可以更加突出地呈现这个问题。
此问题由romainfrancois从tidyverse/dplyr#3958移动而来。
%>%
函数实际上是从 'pkg:magrittr' 导入的。您需要引用或使用反引号来使用%>%
。 - IRTFMmagrittr::\
%>%``。 - Andrie