Почему использование dplyr pipe (%>%) медленнее, чем эквивалентное выражение, отличное от конвейера, для группирования с большим количеством элементов?
Я думал, что, вообще говоря, используя%>%
не будет заметно влиять на скорость. Но в этом случае он работает в 4 раза медленнее.
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))
Без трубы:
min lq mean median uq max neval
1.691441 1.739436 1.841157 1.812778 1.880713 2.495853 100
С трубой:
min lq mean median uq max neval
6.753999 6.969573 7.167802 7.052744 7.195204 8.833322 100
Почему%>%
намного медленнее в этой ситуации? Есть ли лучший способ написать это?