В чем разница между%>% и%,% в magrittr?

В версии Gigub для разработки 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 <- function(...) ..., но %,% является более сжатым способом.