1. Învăţa
  2. /
  3. Courses
  4. /
  5. 効率的なRコードの書き方

Connected

exercise

parSapply() を使う

以前、次のゲームを行いました。

  • 初期化: total = 0。
  • サイコロを 1 回振り、total に加算します。
  • total が偶数なら、total を 0 にリセットします。
  • total が 10 より大きくなったら、ゲーム終了です。

このゲームは play() 関数でシミュレーションできます。

play <- function() {
  total <- no_of_rolls <- 0
  while(total < 10) {
    total <- total + sample(1:6, 1)

    # If even. Reset to 0
    if(total %% 2 == 0) total <- 0 
    no_of_rolls <- no_of_rolls + 1
  }
  no_of_rolls
}

ゲームを 100 回シミュレーションするには、for ループや sapply() を使えます。

res <- sapply(1:100, function(i) play())

これは並列実行に最適です!

関数をクラスターで使えるようにするには、clusterExport() を使います。これは、クラスターと、エクスポートする関数名の文字列を受け取ります。

clusterExport(cl, "some_function")

Instrucţiuni

100 XP

play() 関数はワークスペースに定義されています。

  • makeCluster() を使ってクラスターを作成し、使用するコア数を 2 に設定してください。結果は cl として保存します。
  • play() 関数をクラスターにエクスポートします。
  • 上の sapply() 関数を書き換えて、parSapply() を使うようにします。
  • stopCluster() を使ってクラスターを停止します。