私は、一般的には%>%
を使ってスピードに顕著な影響はないと考えました。しかし、この場合は4倍遅くなります。パイプなしdplyrパイプ(%>%)を同等の非パイプ式より遅く使用するのはなぜですか?
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
なぜ%>%
は、このような状況でそんなに遅いですか?これを書くには良い方法がありますか?以前は「無視できる」の時間に依存しているワンライナーを書くときに、実世界の完全なアプリケーションではほとんど影響かもしれない何
ユニットを離れるべきではありません。この場合、おそらくミリ秒またはマイクロ秒ということになります。 –
2つのスニペットを比較しようとしている場合は、同じ 'microbenchmark'呼び出しで両方のスニペットを実行してください:' microbenchmark(code1 = {... first snippet ...}、code2 = {... second snippet ...} ) '(または名前なしで)、時間を直接比較することができます。 – alistaire