rollapply 具有 returns 多个值的功能

rollapply with function that returns more than one value

假设我想将 rollapply 与 return 超过值的函数一起使用。像这样:

library(quantmod)
getSymbols("YHOO")

openYHOO <- YHOO[1:10,1]

rollapply(openYHOO, width = 2, range)

我收到一个错误。 我还尝试在函数内合并结果:

rollapply(openYHOO, width = 2, function(x) {
  cbind(range(x))
})

rollapply(openYHOO, width = 2, function(x) {
  merge(range(x))
})

更多错误。
我可以这样做:

cbind(
  rollapply(openYHOO, width = 2, function(x) {
    range(x)[1]
  }),
  rollapply(openYHOO, width = 2, function(x) {
    range(x)[2]
  })
)

...而且有效。

但是,如果我想调用 fivenum 或在 fun 参数中使用更复杂和计算密集型的东西怎么办?我是否必须为我想要 return 的每个值调用 rollapply,一遍又一遍地生成相同的对象?

我是不是遗漏了什么或者我应该放弃 rollapply 并滚动我自己的滚动 window 函数?

你能解释一下为什么这个 rollapply(openYHOO, width = 2, range) 不起作用吗?

使用by.column参数

rollapply(openYHOO, width=2, range, by.column=FALSE)
#            [,1]  [,2]
#2007-01-03    NA    NA
#2007-01-04 25.64 25.85
#2007-01-05 25.64 26.70
#2007-01-08 26.70 27.70
#2007-01-09 27.70 28.00
#2007-01-10 27.48 28.00
#2007-01-11 27.48 28.76
#2007-01-12 28.76 28.98
#2007-01-16 28.98 29.88
#2007-01-17 29.40 29.88

> rollapply(openYHOO, width=2, 
            function(x) fivenum(as.numeric(x)), 
            by.column=FALSE)
#            [,1]  [,2]   [,3]  [,4]  [,5]
#2007-01-03    NA    NA     NA    NA    NA
#2007-01-04 25.64 25.64 25.745 25.85 25.85
#2007-01-05 25.64 25.64 26.170 26.70 26.70
#2007-01-08 26.70 26.70 27.200 27.70 27.70
#2007-01-09 27.70 27.70 27.850 28.00 28.00
#2007-01-10 27.48 27.48 27.740 28.00 28.00
#2007-01-11 27.48 27.48 28.120 28.76 28.76
#2007-01-12 28.76 28.76 28.870 28.98 28.98
#2007-01-16 28.98 28.98 29.430 29.88 29.88
#2007-01-17 29.40 29.40 29.640 29.88 29.88