更新(= rbind)新行时data.table
比xts
慢近6倍的原因是什么?
library(quantmod); library(xts); library(data.table)
XTS = getSymbols("AAPL", from="2000-01-01", env = NULL)
# make corresponding `data.table`:
DT <- as.data.table(as.data.frame(XTS))
DT[, Date:=index(XTS)]
setkey(DT,Date)
setcolorder(DT,c("Date",names(XTS)))
# Note: rerun the above before running each test.
system.time(for(i in 1:10) XTS = rbind(XTS, XTS)) # reindexing is automatic
# user system elapsed
# 0.15 0.03 0.47
system.time(for(i in 1:10) DT = setkey(rbind(DT, DT), Date)) # need to manually reset key
# user system elapsed
# 0.64 0.02 2.30
system.time(for(i in 1:10) DT = setkey(rbindlist(list(DT, DT)), Date)) # ditto
# user system elapsed
# 0.60 0.02 2.20
data.table
(与xts不同)甚至会耗尽我计算机上i> 15的内存分配。
常见的编程用例是当您运行时间模拟并希望将中间测量值收集到结果表中时,您稍后要总结该结果表。
答案 0 :(得分:0)
尝试
rbindlist( rep( list(DT), 10 ))
rbindlist
应该显着提升您的运行时间。