MulaiMulai sekarang secara gratis

Menggunakan parSapply()

Sebelumnya kita memainkan permainan berikut:

  • Inisialisasi: total = 0.
  • Lempar satu dadu dan tambahkan nilainya ke total.
  • Jika total genap, setel ulang total menjadi nol.
  • Jika total lebih besar dari 10, permainan selesai.

Permainan ini dapat disimulasikan menggunakan fungsi 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
}

Untuk mensimulasikan permainan sebanyak 100 kali, kita dapat menggunakan for loop atau sapply():

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

Ini sangat cocok untuk dijalankan secara paralel!

Agar fungsi tersedia pada sebuah klaster, Anda menggunakan fungsi clusterExport(). Fungsi ini menerima sebuah klaster dan sebuah string yang menyebutkan nama fungsi.

clusterExport(cl, "some_function")

Latihan ini adalah bagian dari kursus

Menulis Kode R yang Efisien

Lihat Kursus

Petunjuk latihan

Fungsi play() telah didefinisikan di ruang kerja Anda.

  • Buat sebuah klaster menggunakan makeCluster(); setel jumlah core yang digunakan sama dengan 2. Simpan hasilnya sebagai cl.
  • Ekspor fungsi play() ke klaster.
  • Tulis ulang fungsi sapply() di atas menjadi parSapply().
  • Hentikan klaster menggunakan stopCluster().

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

library("parallel")
# Create a cluster via makeCluster (2 cores)
cl <- ___

# Export the play() function to the cluster
___

# Re-write sapply as parSapply
res <- sapply(1:100, function(i) play())

# Stop the cluster
___
Edit dan Jalankan Kode