CommencerCommencer gratuitement

Utiliser parSapply()

Nous avons précédemment joué au jeu suivant :

  • Initialisation : total = 0.
  • Lancez un dé et ajoutez le résultat à total.
  • Si total est pair, réinitialisez total à zéro.
  • Si total est 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

Afficher le cours

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 dans cl.
  • Exportez la fonction play() vers le cluster.
  • Réécrivez l’appel à sapply() ci‑dessus avec parSapply().
  • 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
___
Modifier et exécuter le code