ÎncepețiÎncepe gratuit

Utilizarea funcției parSapply()

Am simulat anterior următorul joc:

  • Inițializare: total = 0.
  • Aruncă un zar și adaugă rezultatul la total.
  • Dacă total este par, resetează total la zero.
  • Dacă total este 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

Vezi cursul

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 în cl.
  • Exportă funcția play() către cluster.
  • Rescrie funcția sapply() de mai sus ca parSapply().
  • 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
___
Editează și rulează codul