gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:42:49 27 4
gpt4 key购买 nike

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

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

最佳答案

尝试

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

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

关于data.table 中的 rbind + setkey 比自动索引的 xts::rbind 慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26294284/

27 4 0