2

シミュレーション スクリプトの一部を最適化し、その一部を並行して実行しようとしています。それで私はその機能を発見しました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。オプションがあることは知ってforeachcombineますが、私の例のように複数の結果ではなく、1 つのマトリックスの結果がある場合にのみ機能するようです。並列処理アプローチを使用して、古い for ループと同じ結果を得るにはどうすればよいですか。Ubuntu と 3.2.2 を使用しています。

4

1 に答える 1