首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有返回多个值的函数的rollapply

具有返回多个值的函数的rollapply
EN

Stack Overflow用户
提问于 2015-08-21 02:19:08
回答 1查看 640关注 0票数 2

假设我想对返回大于值的函数使用rollapply。如下所示:

代码语言:javascript
复制
library(quantmod)
getSymbols("YHOO")

openYHOO <- YHOO[1:10,1]

rollapply(openYHOO, width = 2, range)

我犯了个错误。我还尝试将函数中的结果合并:

代码语言:javascript
复制
rollapply(openYHOO, width = 2, function(x) {
  cbind(range(x))
})

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

更多的错误。

我可以这么做:

代码语言:javascript
复制
cbind(
  rollapply(openYHOO, width = 2, function(x) {
    range(x)[1]
  }),
  rollapply(openYHOO, width = 2, function(x) {
    range(x)[2]
  })
)

...and它起作用了。

但是,如果我想调用fivenum或者在有趣的争论中使用更复杂和计算更密集的东西,该怎么办?是否必须对要返回的每个值调用rollapply,并一次又一次地生成相同的对象?

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-21 02:29:39

使用by.column参数

代码语言:javascript
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32131399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档