CommencezCommencez gratuitement

Intercepter les erreurs de modélisation

L'espérance de vie à la naissance est un indicateur majeur de la santé des populations.

Vous travaillez comme chercheur·e consultant·e en santé publique. Votre client souhaite connaître l'augmentation de l'espérance de vie pour chaque dollar dépensé en soins de santé. Vous avez rassemblé des données sur l'espérance de vie (en années) pour tous les pays et leurs dépenses de santé par habitant, de 2001 à 2021. Le statisticien-conseil a rédigé du code pour ajuster des modèles de régression à partir des données de chaque pays. Cependant, des valeurs manquantes dans les données provoquent des erreurs lors de l'ajustement des modèles.

Vous disposez d'une liste de trames de données dans votre espace de travail, ls_df, où chaque élément correspond aux données d'un pays donné. Vous prévoyez de paralléliser avec parLapply() et d'utiliser tryCatch() pour intercepter les erreurs. Le paquet parallel a été chargé pour vous.

Cette activité fait partie du cours

Programmation parallèle en R

Voir le cours

Instructions de l’exercice

  • Fournissez une fonction à l'argument error. Cette fonction doit prendre un argument, e, et utiliser paste() pour placer la chaîne "Error!" avant e.
  • Modifiez fit_lm() pour vérifier si model est une chaîne de caractères contenant le message d'erreur.
  • Créez un groupe de travaux avec six cœurs.
  • Appliquez fit_lm() à la liste ls_df en parallèle à l'aide de parLapply().

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

fit_lm <- function (df) {
  model <- tryCatch(lm(life_expectancy ~ health_exp_per_capita, data = df),
# Supply a function that pastes "Error!" and one argument, e
                    error = ___)                   
# If model is character (error) return model else return model coefficient
  if (___) return(model)
  else return(coef(model)[2])
}
# Make a cluster of six cores
cluster <- ___(___)
# Apply fit_lm in parallel to ls_df using cluster
ls_mod <- parLapply(___, ___, ___)
stopCluster(cluster)
                    
print(paste(sum(sapply(ls_mod, is.numeric)), "models fit and", sum(sapply(ls_mod, is.character)), "errors caught!"))
Modifier et exécuter le code