シミュレーション スクリプトの一部を最適化し、その一部を並行して実行しようとしています。それで私はその機能を発見しましたforeach
。例として、次を並行して実行しようとしています
Wiederholungen<-4
assign("A",array(0,c(Wiederholungen,10,3)))
assign("B",array(0,c(Wiederholungen,10,3)))
assign("C",array(0,c(Wiederholungen,10,3)))
古いコード:
for(m in 1:Wiederholungen){
A[m,,]<-m
B[m,,]<-m
C[m,,]<-m
}
結果: (A の場合)
A
, , 1
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 1 1 1 1
[2,] 2 2 2 2 2 2 2 2 2 2
[3,] 3 3 3 3 3 3 3 3 3 3
[4,] 4 4 4 4 4 4 4 4 4 4
, , 2
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 1 1 1 1
[2,] 2 2 2 2 2 2 2 2 2 2
[3,] 3 3 3 3 3 3 3 3 3 3
[4,] 4 4 4 4 4 4 4 4 4 4
, , 3
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 1 1 1 1 1 1 1 1
[2,] 2 2 2 2 2 2 2 2 2 2
[3,] 3 3 3 3 3 3 3 3 3 3
[4,] 4 4 4 4 4 4 4 4 4 4
これにより、 m の値が dataframes の m 番目の行に配置されA,B & C
ます。私のスクリプトでは、m はスクリプトが実行する複製 (Wiederholungen) の数です。
Foreach コード:
foreach(m=1:Wiederholungen)%dopar%{
A[m,,]<-m
B[m,,]<-m
C[m,,]<-m
}
その結果:
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[1] 3
[[4]]
[1] 4
しかし、これは dataframes の上記の結果にはつながりませんA,B,C
。オプションがあることは知ってforeach
いcombine
ますが、私の例のように複数の結果ではなく、1 つのマトリックスの結果がある場合にのみ機能するようです。並列処理アプローチを使用して、古い for ループと同じ結果を得るにはどうすればよいですか。Ubuntu と 3.2.2 を使用しています。