Utiliser parSapply()
Nous avons précédemment joué au jeu suivant :
- Initialisation :
total = 0. - Lancez un dé et ajoutez le résultat à
total. - Si
totalest pair, réinitialiseztotalà zéro. - Si
totalest supérieur à 10, la partie se termine.
Ce jeu peut être simulé avec la fonction 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
}
Pour simuler le jeu 100 fois, nous pouvons utiliser une boucle for ou sapply() :
res <- sapply(1:100, function(i) play())
C’est parfait pour une exécution en parallèle !
Pour rendre des fonctions disponibles sur un cluster, utilisez la fonction clusterExport(). Elle prend un cluster et une chaîne indiquant le nom de la fonction.
clusterExport(cl, "some_function")
Cet exercice fait partie du cours
Écrire du code R efficace
Instructions
La fonction play() a été définie dans votre espace de travail.
- Créez un cluster avec
makeCluster(); définissez le nombre de cœurs à 2. Stockez le résultat danscl. - Exportez la fonction
play()vers le cluster. - Réécrivez l’appel à
sapply()ci‑dessus avecparSapply(). - Arrêtez le cluster avec
stopCluster().
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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
___