私は data.tables を初めて使用するので、これが非常に基本的な質問である場合は申し訳ありません。
data.tables を使用すると、大量のデータを処理する際の計算時間が大幅に短縮されると聞いたので、data.tables が rollapply 関数の高速化に役立つかどうかを確認したいと思います。
単変量データがある場合
xts.obj <- xts(rnorm(1e6), order.by=as.POSIXct(Sys.time()-1e6:1), tz="GMT")
colnames(xts.obj) <- "rtns"
幅が 100 で ap が 0.75 の単純なローリング分位点では、驚くほど長い時間がかかります...
つまり、コード行
xts.obj$quant.75 <- rollapply(xts.obj$rtns,width=100, FUN='quantile', p=0.75)
永遠にかかりそうだ…
物事をスピードアップするためにdata.tableができることはありますか? つまり、適用できる一般的なロール機能はありますか?
おそらく、xts オブジェクトを data.table オブジェクトに変換して関数を高速に実行し、最後に xts に再変換するルーチンでしょうか?
前もって感謝します
ほら
ps data.table メーリング リストであまり反応がないようだったので、ここに投稿して、より良い反応が得られるかどうかを確認します。
pps がデータフレームを使用した別の例を簡単に試してみると、data.table ソリューションは rollapply 関数よりも時間がかかるようです。つまり、以下に示します。
> x <- data.frame(x=rnorm(10000))
> x.dt <- data.table(x)
> system.time(l1 <- as.numeric(rollapply(x,width=10,FUN=quantile,p=0.75)))
user system elapsed
2.69 0.00 2.68
> system.time(l <- as.numeric(unlist(x.dt[,lapply(1:((nrow(x.dt))-10+1), function(i){ x.dt[i:(i+10-1),quantile(x,p=0.75)]})])))
user system elapsed
11.22 0.00 11.51
> identical(l,l1)
[1] TRUE