Le paquet parallel - parSapply

Écrire du code R efficace

Colin Gillespie

Jumping Rivers & Newcastle University

La famille apply

Il existe des versions parallèles de

  • apply() - parApply()
  • sapply() - parSapply()
    • appliquer une fonction à un vecteur, p. ex. une boucle for
  • lapply() - parLapply()
    • appliquer une fonction à une liste
Écrire du code R efficace

La fonction sapply()

sapply() est une autre façon d'écrire une boucle for

La boucle

for(i in 1:10)
    x[i] <- simulate(i)

Peut s'écrire ainsi

sapply(1:10, simulate)

On applique une fonction à chaque valeur d'un vecteur

Écrire du code R efficace

Passer à parSapply()

Même recette !

  1. Charger le paquet
  2. Créer un grappe
  3. Passer à parSapply()
  4. Arrêter !
Écrire du code R efficace

Exemple : combats Pokémon

plot(pokemon$Defense, pokemon$Attack)
abline(lm(pokemon$Attack ~ pokemon$Defense), col = 2)
cor(pokemon$Attack, pokemon$Defense)
0.437

Écrire du code R efficace

Bootstrap

Dans un monde idéal, on rééchantillonnerait la population ; mais ce n'est pas possible

On suppose donc que l'échantillon d'origine représente la population

  1. Échantillonner avec remise à partir de vos données
    • Le même point peut apparaître plusieurs fois
  2. Calculer la corrélation sur le nouvel échantillon
  3. Répéter
Écrire du code R efficace

Un seul bootstrap

bootstrap <- function(data_set) {
    # Sample with replacement
    s <- sample(1:nrow(data_set), replace = TRUE)
    new_data <- data_set[s,]

    # Calculate the correlation
    cor(new_data$Attack, new_data$Defense)
}
# 100 independent bootstrap simulations
sapply(1:100, function(i) bootstrap(pokemon))
Écrire du code R efficace

Passer en parallèle

  • Charger le paquet
  • Indiquer le nombre de cœurs
  • Créer un objet grappe
  • Exporter fonctions/données
  • Passer à parSapply()
  • Arrêter !
library("parallel")
no_of_cores <- 7
cl <- makeCluster(no_of_cores)
clusterExport(cl,
  c("bootstrap", "pokemon"))
parSapply(cl, 1:100,
  function(i) bootstrap(pokemon))
stopCluster(cl)
Écrire du code R efficace

Temps d'exécution

Écrire du code R efficace

Passons à la pratique !

Écrire du code R efficace

Preparing Video For Download...