【问题标题】:rollapply with function that returns more than one valuerollapply 与返回多个值的函数
【发布时间】:2015-08-21 02:19:08
【问题描述】:

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

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 参数中使用更复杂且计算量更大的东西怎么办?我是否必须为要返回的每个值调用 rollapply,一遍又一遍地生成相同的对象?

我是否遗漏了什么,还是应该放弃 rollapply 并滚动我自己的滚动窗口功能?

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

【问题讨论】:

    标签: r rollapply


    【解决方案1】:

    使用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
    

    【讨论】:

    • 这行得通。谢谢。不是我对“by.column 逻辑的帮助文档描述的期望。如果为 TRUE,则 FUN 将分别应用于每一列。”但是文档中的示例确实显示了我正在寻找的行为。适用于我的示例:rollapply(openYHOO, width = 3, FUN = function(x) coef(lm(x ~ seq_along(x))), by.column = FALSE, align = "right")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2020-12-06
    • 2018-01-01
    • 2011-05-10
    • 2016-09-27
    • 2015-12-14
    相关资源
    最近更新 更多