test <- data.table(x=sample.int(10, 1000000, replace=TRUE))
y <- test$x
test[,.N, by=x] # fast
test[,.N, by=y] # extremely slow
2番目のケースで遅いのはなぜですか?
これを行うとさらに高速です。
test[,y:=y]
test[,.N, by=y]
test[,y:=NULL]
最適化が不十分なように見えますか?
test <- data.table(x=sample.int(10, 1000000, replace=TRUE))
y <- test$x
test[,.N, by=x] # fast
test[,.N, by=y] # extremely slow
2番目のケースで遅いのはなぜですか?
これを行うとさらに高速です。
test[,y:=y]
test[,.N, by=y]
test[,y:=NULL]
最適化が不十分なように見えますか?
この記事を更新するのを忘れていたようです。
は のベクトルです
#5106
が、の列ではありませDT[, .N, by=y]
ん。ご報告ありがとうございます。y
length(y) = nrow(DT)
y
DT
colinfang
require(data.table)
test <- data.table(x=sample.int(10, 1000000, replace=TRUE))
y <- test$x
system.time(ans1 <- test[,.N, by=x])
# user system elapsed
# 0.015 0.000 0.016
system.time(ans2 <- test[,.N, by=y])
# user system elapsed
# 0.015 0.000 0.015
setnames(ans2, "y", "x")
identical(ans1, ans2) # [1] TRUE