2017-05-02 3 views
3

foreachを使用しているとき%dopar%を%do%に変更することで、コードを順番に実行できます。これをプログラムで行うにはどうすればよいですか?foreachの%do%と%dopar%の間でプログラム的に切り替える方法はありますか?

など。私は、次のことをしたいだけONE foreach文で:

library(doParallel) 
library(foreach) 

registerDoParallel(cores = 4) 

runner <- function(parallel = FALSE) { 
    if (parallel) 
    foreach(i=1:10) %dopar% { 
     print(i) 
    } 
    else 
    foreach(i=1:10) %do% { 
     print(i) 
    } 
} 

runner() 
runner(TRUE) 
+0

を、次にそれを関数に変換するか、 'source'を使用します。 – zx8754

+0

それはスマートな動きかもしれませんが、私の質問で私がどのように役立つのか分かりません。このコードは非常に現実的ではない例でした。 – katsumi

+0

これは簡単な提案であり、回避策でした。プログラム的にする動機を理解しようとする。 – zx8754

答えて

4

あなたは中置機能を選択するためにifelseを使用することができます。あなたが `プリント(I)`の代わりに、コードの多くを持っている場合

runner <- function(parallel = FALSE) { 
    `%myinfix%` <- ifelse(parallel, `%dopar%`, `%do%`) 
    foreach(i=1:10) %myinfix% { 
     print(i) 
    } 
} 
+0

本当に簡単すぎるようですが、実際に知っておきたいことです。それは他のシナリオでも便利になるかもしれません! – katsumi

関連する問題