Github 开发版的 magrittr 包含了一些很酷的新管道函数,但我不太明白 %>%
和 %,%
的区别。这只是在 %>%
中使用用于值,在 %,%
中使用用于函数的形式,还是具有某些特殊的独特性?
正常的管道操作符是%>%
。您可以使用%,%
创建可重复使用的管道,一种没有数据的管道。然后稍后您可以使用相同的管道与各种数据集配合使用。以下是一个示例。
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(...) ...
,但是使用%,%
更加简洁。
.
占位符代替:top_total <- . %>% group_by(playerID) %>% summarise(total = sum(G)) %>% arrange(desc(total)) %>% head(5)
。该代码将对数据按照playerID进行分组,并计算每个组内G列的总和,之后按照总和的降序排列并取前五个结果。 - Axeman