ComenzarEmpieza gratis

Usar parSapply()

Antes jugamos al siguiente juego:

  • Inicializa: total = 0.
  • Lanza un único dado y súmalo a total.
  • Si total es par, restablece total a cero.
  • Si total es mayor que 10, el juego termina.

Se puede simular el juego con la función 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
}

Para simular el juego 100 veces, podemos usar un bucle for o sapply():

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

¡Esto es perfecto para ejecutarlo en paralelo!

Para poner funciones a disposición en un clúster, usa la función clusterExport(). Esta recibe un clúster y una cadena con el nombre de la función.

clusterExport(cl, "some_function")

Este ejercicio forma parte del curso

Escribir código R eficiente

Ver curso

Instrucciones del ejercicio

La función play() ya está definida en tu espacio de trabajo.

  • Crea un clúster con makeCluster(); establece el número de núcleos en 2. Guarda el resultado como cl.
  • Exporta la función play() al clúster.
  • Reescribe el sapply() anterior como parSapply().
  • Detén el clúster usando stopCluster().

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

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
___
Editar y ejecutar código