我需要在包含约7,000行和11,000列的xts数据上运行滚动窗口功能。我做了以下事情:

require(PerformanceAnalytics)
ssd60<-rollapply(wddxts,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)

我等到12个小时,但计算仍未完成。但是,当我尝试使用小型数据集时,如下所示:
sample<-wddxts[,1:5]
ssd60<-rollapply(sample,width=60,FUN=function(x) SemiDeviation(x),by.column=TRUE)

计算在60秒内完成。我在具有Intel i5-2450M CPU,Windows 7 OS和12 GB RAM的计算机上运行它们。

有人可以建议我是否有更快的方法对大型xts数据集执行上述计算吗?

最佳答案

如果可以,请将它们转换为动物园对象。 rollapply.zoorollapply.xts更有效率(在这种情况下。我不确定哪一种通常更有效):

R> require(PerformanceAnalytics)
R> set.seed(21)
R> x <- .xts(rnorm(7000,0,0.01), 1:7000)
R> system.time({
+   r <- rollapply(x, 60, SemiDeviation, by.column=TRUE, fill=NA)
+ })
   user  system elapsed
  9.936   0.111  10.075
R> system.time({
+   z <- rollapplyr(as.zoo(x), 60, SemiDeviation, by.column=TRUE, fill=NA)
+ })
   user  system elapsed
  1.950   0.010   1.964

关于r - 功能 'rollapply'的更快替代品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25470659/

10-10 16:57