何千ものリストがあり、各リストには複数の時系列があります。リスト内の各要素に予測を適用したいと思います。これは、コンピューティング リソースの観点から、扱いにくい問題になっています。私は、並列コンピューティングや高度な R プログラミングのバックグラウンダーを持っていません。どんな助けでも大歓迎です。
ダミーリストを作成しました。基本的に、dat.list は私が取り組んでいるものと似ています。
library("snow")
library("plyr")
library("forecast")
## Create Dummy Data
z <- ts(matrix(rnorm(30,10,10), 100, 3), start = c(1961, 1), frequency = 12)
lam <- 0.8
ap <- list(z=z,lam=lam)
## forecast using lapply
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)
xa <- proc.time()
tt <- lapply(dat.list,function(x) lapply(x$z,function(y) (forecast::ets(y))))
xb <- proc.time()
上記のコードは、必要なものを提供します。上記のコードで両方のlapplyに並列処理を適用したいと思います。そこで、snow パッケージとこのサイトに示されている例を使用しようとしました。
## Parallel Processing
clus <- makeCluster(3)
custom.function <- function(x) lapply(x$z,function(y) (forecast::ets(y)))
clusterExport(clus,"custom.function")
x1 <- proc.time()
tm <- parLapply(clus,dat.list,custom.function)
x2<-proc.time()
stopCluster(clus)
以下は私の質問です、
- 何らかの理由で、tm の出力は、非並列バージョンでは異なります。予測関数 ets は、リスト内の要素ではなく、すべての単一のデータ ポイントに適用されます。
非平行:
summary(tt)
Length Class Mode
ap 3 -none- list
zp 3 -none- list
パラレルバージョン:
summary(tm)
Length Class Mode
ap 300 -none- list
zp 300 -none- list
私の2番目の質問は、カスタム関数でlapplyをどのように並列化する必要があるかです。基本的にはネストされたparLapplyです
custom.function <- function(x) parLapply(clus,x$z,function(y) (forecast::ets(y))) ## 動作しない
助けてくれて本当にありがとうございます