2013-03-29 44 views
2
require(quantmod) 
require(PerformanceAnalytics) 
getSymbols('INTC') 
x<- monthlyReturn(INTC) 
rollapply(1+x,12,cumprod) 

鉴于上面的代码中,我得到这个错误rollapply应用于XTS对象

Error in array(r, dim = d, dimnames = if (!(is.null(n1 <- names(x[[1L]])) & : 
    length of 'dimnames' [1] not equal to array extent 

我可以验证类X的确实是XTS。

类(x)的 [1] “XTS” “动物园”

我想rollapply工作在XTS /动物园对象。我不知道如何解决这个问题。

感谢您的帮助。

更新

SessionInfo输出:

R version 2.15.3 (2013-03-01) 
Platform: i686-pc-linux-gnu (32-bit) 

locale: 
[1] LC_CTYPE=en_US.UTF-8  LC_NUMERIC=C    LC_TIME=en_US.UTF-8  
[4] LC_COLLATE=en_US.UTF-8  LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
[7] LC_PAPER=C     LC_NAME=C     LC_ADDRESS=C    
[10] LC_TELEPHONE=C    LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C  

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

other attached packages: 
[1] PerformanceAnalytics_1.1.0 quantmod_0.4-0    TTR_0.22-0     
[4] xts_0.9-3     zoo_1.7-9     Defaults_1.1-1    

loaded via a namespace (and not attached): 
[1] grid_2.15.3  lattice_0.20-13 tools_2.15.3 
+0

你使用的是什么版本的xts/zoo/R?即,提供'sessionInfo()'的输出。 –

+1

什么是期望的输出? 'cumprod'返回多个值,所以你希望结果每个输入索引有12个值?或者你可能只是想'prod'而不是'cumprod'? – GSee

回答

4

rollapply.xts假定函数的返回每个滚动窗口的单个值。因此,您需要使用与rollapply.xtscumprod以及拆分应用组合策略,具体取决于您实际想要执行的操作。

rollapply(1+x,12,prod) 
do.call(rbind, lapply(split(1+x,"years"), cumprod)) 
+0

我不敢相信我是多么愚蠢。我试图以滚动方式每12次观察一次。 cumprod给了我一个载体。谢谢你的帮助! – zsljulius

+1

请注意,'rollapply.zoo'不限于标量返回值。 –

2

您已经找到了bug。这是一个解决方法:

z <- as.zoo(x) 
dim(z) <- NULL 
rollapply(1+z, 12, cumprod)