Menggunakan parSapply()
Sebelumnya kita memainkan permainan berikut:
- Inisialisasi:
total = 0. - Lempar satu dadu dan tambahkan nilainya ke
total. - Jika
totalgenap, setel ulangtotalmenjadi nol. - Jika
totallebih 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
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 sebagaicl. - Ekspor fungsi
play()ke klaster. - Tulis ulang fungsi
sapply()di atas menjadiparSapply(). - 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
___