R>%函数在R中的含义是什么?

时间:2014-11-25 11:37:20

标签: r syntax dplyr magrittr r-faq

我已经看到在某些软件包中使用%>%(百分比大于百分比)函数,例如 dplyr rvest 。这是什么意思?这是在R?

中编写闭包块的方法吗?

6 个答案:

答案 0 :(得分:111)

%...%运营商

%>%没有内置含义,但用户(或包)可以任意方式自由定义%whatever%形式的运算符。例如,这个函数将返回一个字符串,该字符串由左边的参数后跟逗号和空格组成,然后是右边的参数。

"%,%" <- function(x, y) paste0(x, ", ", y)

# test run

"Hello" %,% "World"
## [1] "Hello, World"

R的基数提供%*%(矩阵多重复制),%/%(整数除法),%in%(是ls是rhs的一个组成部分?),%o%(外部产品)和%x%(kronecker产品)。目前尚不清楚%%是否属于此类别,但它代表模数。

expm R包expm定义矩阵幂运算符%^%。有关示例,请参阅Matrix power in R

运算符运算符R包已定义了大量此类运算符,例如%!in%(不是%in%)。见http://cran.r-project.org/web/packages/operators/operators.pdf

magrittr %>%的情况下,magrittr R包已经按照magrittr插图中的讨论定义了它。见http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr也定义了许多其他类似的运营商。有关更多详细信息,请参阅前一链接的附加管道运算符部分,该部分讨论%T>%%<>%%$%以及http://cran.r-project.org/web/packages/magrittr/magrittr.pdf

dplyr dplyr R包用于定义类似的%.%运算符;但是,它已被弃用,dplyr现在建议用户使用%>% dplyr从magrittr导入并使dplyr用户可用。正如David Arenburg在评论中提到的那样,SO问题讨论了它与magrittr的%>%之间的差异:Differences between %.% (dplyr) and %>% (magrittr)

pipeR R包pipeR定义了一个类似于magrittr&#39;%&gt;%的%>>%运算符,可以用作它的替代方法。见http://renkun.me/pipeR-tutorial/

pipeR包也定义了许多其他类似的运算符。请参阅:http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic postlogic包定义了%if%%unless%运营商。

wrapr R包,wrapr,定义了一个点管%.>%,它是%>%的显式版本,因为它不会隐式插入参数,而只是替换明确使用右侧的点。这可以被视为%>%的另一种替代方案。见https://winvector.github.io/wrapr/articles/dot_pipe.html

Bizarro管道。这不是真正的管道,而是一些聪明的基本语法,以类似于管道的方式工作而不实际使用管道。在http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/中讨论了这个想法,而不是写作:

1:8 %>% sum %>% sqrt
## [1] 6

一个写下面的内容。在这种情况下,我们明确使用点而不是删除点参数,并使用对名称为点(.)的变量的赋值结束管道的每个组件。我们用分号跟着它。

1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6

更新在顶部添加了关于expm包和简化示例的信息。添加了postlogic包。

答案 1 :(得分:10)

我在阅读link offered by G.Grothendieck后的理解是%&gt;%是一个管理函数的运算符,以提高可读性和生产力,因为通过这些管道跟踪多个函数的流程比当多个函数嵌套时向后移动。

答案 2 :(得分:3)

%>%类似于Unix中的管道。例如,在

a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()

combined_data_set的输出将进入group_by,其输出将进入tally,然后最终输出将分配给a

这使您可以方便,轻松地使用串行函数,而无需创建变量和存储中间值。

答案 3 :(得分:0)

我对它了解不多,但我在大学学习 R 中的多元正态分布时在一个案例研究中看到过

假设您在名为“df_gather”的变量中有一个数据框,并且您想将其通过管道传输到 ggplot 中,那么您可以使用该 %>%

EG:

function addVeggieToBasket(choiceList) {
   console.log(choiceList.value);
   console.log(choiceList.options[choiceList.selectedIndex].dataset.name);

}

答案 4 :(得分:-1)

R软件包dplyr和sf从R软件包magrittr导入运算符%>%。

可以使用以下命令获得帮助:

?'%>%'

当然必须先使用例如

加载软件包
library(sf)

magrittr前管运算符的文档提供了一个很好的示例: 当函数仅需要一个参数时,x%>%f等于f(x)

答案 5 :(得分:-2)

管道%>%传递来自管道之前的函数的数据框输出,将其作为管道之后的函数的第一个参数输入。

For Example