Usar parSapply()
Antes jugamos al siguiente juego:
- Inicializa:
total = 0. - Lanza un único dado y súmalo a
total. - Si
totales par, restablecetotala cero. - Si
totales 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
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 comocl. - Exporta la función
play()al clúster. - Reescribe el
sapply()anterior comoparSapply(). - 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
___