2014-12-06 57 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

相关问题