Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
rollapply输出两列或多列_R_Xts - Fatal编程技术网

rollapply输出两列或多列

rollapply输出两列或多列,r,xts,R,Xts,我正在尝试使用rollapply,以便只使用一次,而不是多次,然后合并结果。我的想法是希望从xts对象中获取多个数据位。在下面的模拟示例中,我希望能够获得滑动窗口的总和和最大值 require(xts) v <- xts(rnorm(100),Sys.Date()-100:1) rollapply(v,width=10,function(y){c(sum(y),max(y))}) 下面是我正在运行的sessionInfo: R version 2.15.2 (2012-10-26) Pl

我正在尝试使用rollapply,以便只使用一次,而不是多次,然后合并结果。我的想法是希望从
xts
对象中获取多个数据位。在下面的模拟示例中,我希望能够获得滑动窗口的总和和最大值

require(xts)
v <- xts(rnorm(100),Sys.Date()-100:1)
rollapply(v,width=10,function(y){c(sum(y),max(y))})
下面是我正在运行的sessionInfo:

R version 2.15.2 (2012-10-26)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] xts_0.9-3 zoo_1.7-9

loaded via a namespace (and not attached):
[1] grid_2.15.2     lattice_0.20-10

我想我以前就已经弄明白了,但显然没有……

这是一种方法

sapply( c("sum" , "max" ) , function(x) rollapply( v , width = 10 , FUN = eval(x) , align = "left" ) )
#              sum       max
#  [1,] -2.43662744 1.6931489
#  [2,] -1.95346657 1.6931489
#  [3,] -0.66191032 1.6931489
#  [4,] -1.97506474 1.6931489
#  [5,] -3.12090491 1.6931489
#  [6,] -6.32315512 0.6908325
#  [7,] -3.09130768 2.4151086
#  [8,] -1.27864497 2.4151086
#  [9,] -0.20942059 2.4151086
# [10,] -0.39156830 2.4151086

当输入只有一列时,这是当前实现的一个限制。您可以通过确保输入有多个列、将
设置为by.column=FALSE
、调整函数以仅使用一列来解决此问题

例如:

require(xts)
v <- xts(rnorm(10),Sys.Date()-10:1)
f <- function(y) c(sum=sum(y[,1]), max=max(y[,1]))
rollapply(merge(v,v), width=3, f, by.column=FALSE)
require(xts)

v我认为它仍然在使用该方法运行两次
rollapply
,而且在我的实际示例中,这些函数比简单的
sum
max
要复杂得多,因此,不要认为它会起作用……如果您首先定义函数,那么它应该起作用,函数只需要从列中获取值。你为什么不试试呢。是的,它运行了两次rollapply,对于您要评估的每个函数运行一次。如果这还不够,那么给出一个你想要运行的函数和足够运行它的数据的例子。是的,我想你可以这样做…但是更大的问题是执行两次
rollappy
我的数据集相当大…同样在你的示例输出中…你似乎没有日期/时间索引。。。,其中as
rollapply
确实有一个函数……我知道它很容易修复……但请让您知道……好的,我不知道您是否可以在
rollappy
中同时应用两个函数(我相信您必须能够!),要获得时间戳,只需将
索引(v)
添加到
sapply
中的匿名函数中即可。干杯我认为你“必须”也能…并且希望得到一个快速的答案…但是必须等待,看看那些贡献者能提供什么…如果你用
as.zoo(v)
替换
rollappy(v,…)
中的
as.zoo(v)
,那么它就可以工作了,我收到错误消息:
错误在
rownames@G.Grothendieck我在
行中遇到了
错误,对不起。试试这个:
z谢谢!我可以一直依靠你,约书亚!出于好奇,这个小限制是否会很快得到纠正,以便它能够处理单列输入?@h.l.m:我将其添加到功能请求跟踪器中,但我无法告诉你我(或其他人)何时会实际修补它。
require(xts)
v <- xts(rnorm(10),Sys.Date()-10:1)
f <- function(y) c(sum=sum(y[,1]), max=max(y[,1]))
rollapply(merge(v,v), width=3, f, by.column=FALSE)