2013-03-29 46 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)