2014-12-06 56 views
1

我有一個包含多個元素的列表,我需要使用來自每個列表中的兩個元素的預測來應用ets函數。R編程如何將列表中的單個元素應用於函數

下面是dat.list每個列表具有時間序列列表稱爲zlam

## Create Dummy list 
##Time series -> z, lambda - > lam 
z <- ts(matrix(rnorm(30,10,10), 100, 3), start = c(1961, 1), frequency = 12) 
lam <- 0.8 
ap <- list(z=z,lam=lam) 


z <- ts(matrix(rnorm(30,10,10), 100, 3), start = c(1971, 1), frequency = 12) 
lam <- 0.5 
zp <- list(z=z,lam=lam) 

dat.list <- list(ap=ap,zp=zp) 

現在我需要拿每個時間序列z,並採取lamets功能從forecast封裝應用它。我使用了下面的代碼。

library("forecast") 
library("plyr") 
ets.f <- function(x) { 
     forecast(ets(x$z, lambda = x$lam),h=12)$mean ## I need to apply lambda from list lam 
    } 

    ens.f <- function(x){ 
     mm <- llply(x,ets.f) 
     tq <- matrix(unlist(mm), ncol = 12, byrow = TRUE) 
     tq 
    } 

    fore <- llply(dat.list, ens.f) 

當我運行程序時,出現以下錯誤"Error in x$z : $ operator is invalid for atomic vectors"

我不知道如何應用列表中的單個元素並將其應用於函數。任何幫助將不勝感激。

非常感謝

而且,我也試圖在列表中分離zlam,並被困在如何應用它。我也在使用下面的代碼。非常感謝。

ts.l <- lapply(dat.list,'[[','z') 
lam.l <- lapply(dat.list,'[[','lam') 

回答

1

可能這會有所幫助:

lapply(dat.list, function(x) matrix(unlist(lapply(x$z, 
      function(y) forecast(ets(y, lambda=x$lam), 
         h=12)$mean)), ncol=12, byrow=TRUE)) 
+0

感謝@akrun,這正是我想要的。 – forecaster 2014-12-06 16:26:52

+0

@forecaster沒問題。很高興幫助。 – akrun 2014-12-06 16:27:36

+0

嗨@akrun,因爲我有很多1000的矩陣,我正在考慮平行運行它。如果你可以修改上面的代碼,使用package'snow'在兩個實例中將lapply更改爲parLapply,那將是非常好的。我也可以提出一個單獨的問題。非常感謝 – forecaster 2014-12-15 12:53:55

相關問題