2017-11-28 2 views
0

私はRでの並列計算が新しく、次のようにX、Y、Zに新しい値を追加することができます(非常に単純化された元の問題)。Rでの並列計算、合計変数

library(foreach) 
library(doParallel) 

X <- 0 
Y <- 0 
Z <- 0 

cores <- detectCores() 
cl <- makeCluster(cores[1] - 1) #not to overload your computer 
registerDoParallel(cl) 
A <- foreach(i = 1:3, .combine = data.frame) %dopar% { 
    X = X + i 
    Y = Y + i + 2 
    Z = Z + i + 3 
} 
stopCluster(cl) 

IはA = [6 12 15](6 = 1 + 2 + 3を取得することを望んだ; 12 =(1 + 2)+ + 2(2)+(3 + 2); 15 =(1 + 3)+(2 +3)+(3 + 3))、残念ながらこの結果はA = [4 5 6]です。

私はforeachののドキュメントの助けを借りて、この問題を解決しようとした、と私は私が所望の出力を得るために.combineのための機能を自分で作らなければならないと思うが、私はどのように表示されていない...

誰かが私を助けることができますか?

ありがとうございます!

+0

なぜあなたはこれをしたいですか?これの背後にある本当の問題は何ですか? –

+0

私はシミュレーションを行う必要がありますし、実際の値と推定値との差の二乗を計算してみます(最後に、これらの差を合計したいと思います)。しかし、私は別の対策があります:) – Chris

答えて

0

ちょうどそれを見つけました!次のコードは、所望の出力を返し

ライブラリ(foreachの)

ライブラリ(doParallel)

X <から0

Y = 0

Z = 0

コア= detectCores()

CL < - makeCluster(コア[1] -1)#notコンピュータ過負荷

registerDoParallel(CL)

A = foreachの(I = 1:3、.combine = '+')%dopar% {

X = X + I

Y = Y + I + 2

Z = Z + I + 3

リターン(C(X、Y、Z))

}

STOPCLUSTER(CL)