fanshenzhang
%>%是通道运算符(也称为管道运算符,pipe operator),表示把符号左边的内容传到符号右边的函数中,并作为其第一个参数。如果通道运算符右侧的函数中出现了点(.),那么左边的内容不再是右边函数中的第一个参数,而代替点的位置。
举个例子。比如我想知道mtcars数据集里disp字段中最大的三个值的平均值是多少。那么常规的写法是
mean(sort(mtcars$disp, decreasing=T)[1:3])
这样的写法很正统,但其缺点是如果处理的步骤很多,就需要借助额外的变量来存储中间结果,或者老眼昏花看好多遍保证各个函数的括号是配对的。所以为了避免这样的难题,我们可以借助通道运算符把上面这个过程分步一点点写出来:
mtcars$disp %>% sort(decreasing=T) %>% .[1:3] %>% mean
你可以发现,在进行排序的时候,sort()里是没有点的,所以通道运算符左边的部分mtcars$disp就成为了sort()函数的第一个参数。而在取排序结果的前三个值的时候,.替代了通道运算符左侧的部分,也就是已经降序排列好了的mtcars$disp。
通道运算符特别适合中国人的思维,因为它几乎可以意译为“的”,就像这样:
# mtcars $disp %>% sort(decreasing=T) %>% .[1:3] %>% mean
# mtcars数据集里 disp字段中 的 最大 的 三个值 的 平均值
最后,如果想使用通道运算符,需要载入magrittr包(载入tidyverse或者dplyr包也可以)。