我有一个 xts
对象,大约有 200 万行。我正在尝试将 rollapply
与 width=10000
一起使用。 rollapply 似乎内存不足,我无法弄清楚为什么? (我试图通过输入 > rollapply
查看源代码,但只显示了这个:
function (data, ...)
UseMethod("rollapply")
<environment: namespace:zoo>
rollapply 是否会为每个 block 创建 200 万到 10,000 个副本,然后将它们一一传递?这肯定会导致它耗尽内存,但我不认为 zoo
的创建者会这样做?如果是这样的话,那么有谁知道更聪明的方法来进行我的滚动应用..我当前的计划就是简单地这样做:
m <- vector()
for (i in 10001:nrow(my_xts)) {
m <- c(m, my_fun(my_xts[i-10000:i]))
}
确定有更好的方法吗?
最佳答案
看起来内存消耗是在 zoo:::rollapply.zoo
中的 maply
调用期间发生的。有一个 xts rollapply
方法,但它没有导出,因此不会通过方法调度调用它。也就是说,您可以明确地调用它:
my_xts <- .xts(1:1e5*1,1:1e5)
m <- xts:::rollapply.xts(my_xts, width=10000, FUN=sum)
使用methods(foo)
来查看每当遇到以下情况时可以使用哪些方法:
function(...)
UseMethod("foo")
关于xts 中的 rollapply 内存不足 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918819/