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
Instructions
- Fournissez une fonction à l’argument error. Cette fonction doit prendre un argument,
e, et utiliserpaste()pour placer la chaîne"Error!"avante. - Modifiez
fit_lm()pour vérifier simodelest une chaîne de caractères contenant le message d’erreur. - Créez un cluster avec six cœurs.
- Appliquez
fit_lm()à la listels_dfen parallèle à l’aide deparLapply().
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!"))