CommencerCommencer 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 consultant·e en recherche en santé publique. Votre client souhaite connaître l’augmentation de l’espérance de vie pour chaque dollar dépensé en santé. Vous avez collecté 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 en charge a écrit du code pour ajuster des modèles de régression pour chaque pays. Cependant, des valeurs manquantes dans les données provoquent des erreurs lors de l’ajustement des modèles.

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

Cet exercice fait partie du cours

Programmation parallèle en R

Afficher le cours

Instructions

  • 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 cluster 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 cet exemple de code.

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