Warum verwendet dplyr pipe (%>%) langsamer als ein äquivalenter Ausdruck, der keine Pipe ist, für Group-by-Operationen mit hoher Kardinalität?

Ich dachte, dass im Allgemeinen mit%>% hätte keinen spürbaren Einfluss auf die Geschwindigkeit. Aber in diesem Fall läuft es 4x langsamer.

library(dplyr)
library(microbenchmark)

set.seed(0)
dummy_data <- dplyr::data_frame(
  id=floor(runif(100000, 1, 100000))
  , label=floor(runif(100000, 1, 4))
)

microbenchmark(dummy_data %>% group_by(id) %>% summarise(list(unique(label))))
microbenchmark(dummy_data %>% group_by(id) %>% summarise(label %>% unique %>% list))

Ohne Pipe:

min       lq     mean   median       uq      max neval
1.691441 1.739436 1.841157 1.812778 1.880713 2.495853   100

Mit Pipe:

min       lq     mean   median       uq      max neval
6.753999 6.969573 7.167802 7.052744 7.195204 8.833322   100

Warum ist%>% so viel langsamer in dieser situation? Gibt es eine bessere Möglichkeit, dies zu schreiben?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage