data.table中的rbind + setkey比自动索引的xts :: rbind慢吗?

时间:2014-10-10 07:41:14

标签: r data.table xts

更新(= rbind)新行时data.tablexts慢近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的内存分配。

常见的编程用例是当您运行时间模拟并希望将中间测量值收集到结果表中时,您稍后要总结该结果表。

1 个答案:

答案 0 :(得分:0)

尝试

rbindlist( rep( list(DT), 10 ))

rbindlist应该显着提升您的运行时间。