1
我有一個包含多個元素的列表,我需要使用來自每個列表中的兩個元素的預測來應用ets函數。R編程如何將列表中的單個元素應用於函數
下面是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"
。
我不知道如何應用列表中的單個元素並將其應用於函數。任何幫助將不勝感激。
非常感謝
而且,我也試圖在列表中分離z
和lam
,並被困在如何應用它。我也在使用下面的代碼。非常感謝。
ts.l <- lapply(dat.list,'[[','z')
lam.l <- lapply(dat.list,'[[','lam')
感謝@akrun,這正是我想要的。 – forecaster 2014-12-06 16:26:52
@forecaster沒問題。很高興幫助。 – akrun 2014-12-06 16:27:36
嗨@akrun,因爲我有很多1000的矩陣,我正在考慮平行運行它。如果你可以修改上面的代碼,使用package'snow'在兩個實例中將lapply更改爲parLapply,那將是非常好的。我也可以提出一個單獨的問題。非常感謝 – forecaster 2014-12-15 12:53:55