data.table
의 이유는 새 행을 업데이트 (= rbind) 할 때 xts
보다 거의 6 배 더 느린 이유는 무엇입니까? 자동으로 색인을 생성하는 xts :: rbind보다 느린 data.table의 rbind + setkey?
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
(XTS는 달리) data.table
것조차 배기 메모리 할당
일반적인 프로그래밍 사용 사례는 임시 시뮬레이션을 실행하고 중간 측정 값을 결과 테이블에 수집하려는 경우입니다. 나중에 결과를 요약하려고합니다.
여기서 'blotter'를 (를) 설치할 수 있습니까? – Arun
@Arun 아, 죄송합니다,'blotter' 대신에'quantmod' - 그냥'quantmod :: getSymbols'를 통해 빠르게 데이터를 얻는 것입니다. 나는 그 질문을 편집했다. –
Beasterfield가 보여준 것처럼 처음부터 수집하고 + setkey를 마지막으로 바인딩 할 수 없습니까? 나는'rbind.xts'가 C로 구현되어 있고, 다시 색인화가 같은 단계에서 수행된다면 더 효율적으로 처리한다는 것을 알 수 있습니다. DT에서는 먼저 바인딩 한 다음 다시 배열해야합니다. 이런 식으로 사용하지 않는 것이 좋습니다. 이 방법으로 업데이트해야합니까? – Arun