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
Instructions de l’exercice
- 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 groupe de travaux avec six cœurs.
- Appliquez
fit_lm()à la listels_dfen parallèle à l'aide deparLapply().
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!"))