2

我有一个xts大约 2 百万行的对象。我正在尝试使用rollapplywith width=10000。rollapply 似乎内存不足,我无法弄清楚为什么?(我试图通过键入来查看源代码,> rollapply但只显示以下内容:

function (data, ...) 
 UseMethod("rollapply")
 <environment: namespace:zoo>

rollapply 是否会为每个块创建 200 万至 10,000 个副本,然后将它们一个一个传递?这肯定会导致它耗尽内存,但我认为创建者不zoo会这样做?如果是这样的话,那么有没有人知道一个更聪明的方法来做我的滚动申请。我目前的计划是简单地这样做:

m <- vector()
for (i in 10001:nrow(my_xts)) {
   m <- c(m, my_fun(my_xts[i-10000:i]))

}

确定有更好的方法吗?

4

1 回答 1

3

看起来内存消耗是在mapply调用期间发生的zoo:::rollapply.zoo。有一个 xtsrollapply方法但是它没有被导出,所以它不会被方法调度调用。也就是说,您可以显式调用它:

my_xts <- .xts(1:1e5*1,1:1e5)
m <- xts:::rollapply.xts(my_xts, width=10000, FUN=sum)

用于methods(foo)查看遇到时可用的方法:

function(...)
  UseMethod("foo")
于 2012-08-12T01:10:17.683 回答