Utiliser parSapply()
Nous avons déjà joué au jeu suivant :
- Initialiser :
total = 0. - Lancer un seul dé et l'ajouter à
total. - Si
totalest pair, réinitialisertotalà zéro. - Si
totalest supérieur à 10, la partie se termine.
Le 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, on peut utiliser une boucle for ou sapply() :
res <- sapply(1:100, function(i) play())
C'est parfait pour l'exécuter en parallèle !
Pour rendre des fonctions disponibles sur un amas, utilisez la fonction clusterExport(). Elle prend un amas et une chaîne qui nomme la fonction.
clusterExport(cl, "some_function")
Cette activité fait partie du cours
Écrire du code R efficace
Instructions de l’exercice
La fonction play() a été définie dans votre espace de travail.
- Créez un amas avec
makeCluster()et fixez le nombre de cœurs à 2. Stockez le résultat danscl. - Exportez la fonction
play()vers l'amas. - Réécrivez la fonction
sapply()ci-dessus avecparSapply(). - Arrêtez l'amas avec
stopCluster().
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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
___