在magrittr中,%>%和%,%有什么区别?

14

Github 开发版的 magrittr 包含了一些很酷的新管道函数,但我不太明白 %>% %,% 的区别。这只是在 %>% 中使用用于值,在 %,% 中使用用于函数的形式,还是具有某些特殊的独特性?

1个回答

22

正常的管道操作符是%>%。您可以使用%,%创建可重复使用的管道,一种没有数据的管道。然后稍后您可以使用相同的管道与各种数据集配合使用。以下是一个示例。

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 <- function(...) ...,但是使用%,%更加简洁。


确实,使用函数的方式是我之前使用过的。谢谢! - BBrill
3
请注意,此功能从未被添加到CRAN,现在使用 . 占位符代替:top_total <- . %>% group_by(playerID) %>% summarise(total = sum(G)) %>% arrange(desc(total)) %>% head(5)。该代码将对数据按照playerID进行分组,并计算每个组内G列的总和,之后按照总和的降序排列并取前五个结果。 - Axeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接