magrittr 中的 %>% 和 %,% 有啥区别?

Posted

技术标签:

【中文标题】magrittr 中的 %>% 和 %,% 有啥区别?【英文标题】:What is the difference between %>% and %,% in magrittr?magrittr 中的 %>% 和 %,% 有什么区别? 【发布时间】:2014-10-02 09:41:19 【问题描述】:

Github 开发版的 magrittr 包含一些很酷的管道新功能,但我并没有完全理解 %>%%,% 之间的区别。这只是正式的,%>% 用于价值,%,% 用于功能,还是有一些特定的特殊性?

【问题讨论】:

【参考方案1】:

正常的管道操作员是%>%。您可以使用%,% 创建可重用管道,即没有数据的管道。然后稍后您可以将同一管道用于各种数据集。这是一个例子。

library(magrittr)
library(dplyr)
library(Lahman)

假设您要根据总命中数计算前 5 名棒球运动员。然后你可以做这样的事情(取自 magrittr README):

Batting %>%
   group_by(playerID) %>%
   summarise(total = sum(G)) %>%
   arrange(desc(total)) %>%
   head(5)
# Source: local data frame [5 x 2]
# 
#    playerID total
# 1  rosepe01  3562
# 2 yastrca01  3308
# 3 aaronha01  3298
# 4 henderi01  3081
# 5  cobbty01  3035

到目前为止一切顺利。现在假设您有多个与Batting 格式相同的数据集,因此您可以再次重用相同的管道。 %,% 帮助您创建、保存和重复使用管道:

top_total <- group_by(playerID) %,%
   summarise(total = sum(G)) %,%
   arrange(desc(total)) %,%
   head(5)

top_total(Batting)
# Source: local data frame [5 x 2]
# 
#    playerID total
# 1  rosepe01  3562
# 2 yastrca01  3308
# 3 aaronha01  3298
# 4 henderi01  3081
# 5  cobbty01  3035

当然你也可以用常规的 R 方式创建函数,即top_total &lt;- function(...) ...,但%,% 是一种更简洁的方式。

【讨论】:

确实,功能的方式是我以前使用的方式。谢谢! 请注意,此功能从未进入 CRAN,现在使用 . 占位符:top_total &lt;- . %&gt;% group_by(playerID) %&gt;% summarise(total = sum(G)) %&gt;% arrange(desc(total)) %&gt;% head(5)

以上是关于magrittr 中的 %>% 和 %,% 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

R:在自编写的包中使用magrittr管道运算符

R中的条件数据框突变与magrittr和dplyr

R中magrittr和arima的兼容性问题

R:在自写包中使用 magrittr 管道运算符

合并 tibble 中的行

如何将管道链(magrittr)的结果提供给对象