使用data.table j
表示法计算较小数据集(例如100,000行或更少)的整个列的摘要统计信息(不进行分组处理),与直接访问元素相比,性能似乎出乎意料地慢:
library(microbenchmark)
library(data.table)
df <- data.frame(x=rnorm(10000, 0, 0.05))
dt <- data.table(df)
microbenchmark(prod(df$x + 1)^(12 / NROW(df)) - 1,
prod(dt$x + 1)^(12 / NROW(dt)) - 1,
dt[,prod(x + 1)^(12 / .N) - 1], times=10000)
Unit: microseconds
expr min lq mean median uq
prod(df$x + 1)^(12/NROW(df)) - 1 51.210 58.0725 85.34422 62.0715 69.8885
prod(dt$x + 1)^(12/NROW(dt)) - 1 68.514 76.4710 107.49639 80.6950 89.5425
dt[, prod(x + 1)^(12/.N) - 1] 777.879 829.9515 951.92379 852.7325 916.0155
这是预期的事情,还是我没有正确使用data.table,或者缺少某些选项?