R编程如何将列表中的各个元素应用于函数

时间:2014-12-06 15:58:02

标签: r list lapply sapply tapply

我有一个包含多个元素的列表,我需要使用每个列表中的两个元素从预测中应用ets函数。

下面是列表dat.list,每个列表都有一个名为z的时间序列和一个lam

## 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并取lam并将其应用于ets包中的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 个答案:

答案 0 :(得分: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))