Utilizarea funcției parSapply()
Am simulat anterior următorul joc:
- Inițializare:
total = 0. - Aruncă un zar și adaugă rezultatul la
total. - Dacă
totaleste par, reseteazătotalla zero. - Dacă
totaleste mai mare decât 10, jocul se termină.
Jocul poate fi simulat cu ajutorul funcției 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
}
Pentru a simula jocul de 100 de ori, putem folosi o buclă for sau sapply():
res <- sapply(1:100, function(i) play())
Acesta este un caz ideal pentru execuție paralelă!
Pentru a pune funcții la dispoziția unui cluster, folosești funcția clusterExport(). Aceasta primește un cluster și un șir de caractere cu numele funcției.
clusterExport(cl, "some_function")
Acest exercițiu face parte din cursul
Scrierea codului R eficient
Instrucțiuni pentru exercițiu
Funcția play() a fost deja definită în spațiul tău de lucru.
- Creează un cluster folosind
makeCluster(); setează numărul de nuclee utilizate la 2. Stochează rezultatul încl. - Exportă funcția
play()către cluster. - Rescrie funcția
sapply()de mai sus caparSapply(). - Oprește clusterul folosind
stopCluster().
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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
___