Intercetta gli errori di modellazione
L'aspettativa di vita alla nascita è un indicatore fondamentale della salute della popolazione.
Lavori come ricercatore consulente in sanità pubblica. Il tuo cliente vuole sapere l'aumento dell'aspettativa di vita per ogni dollaro speso in sanità. Hai reperito i dati sull'aspettativa di vita (in anni) per tutti i paesi e sulla corrispondente spesa sanitaria pro capite, dal 2001 al 2021. Lo statistico consulente ha scritto del codice per adattare modelli di regressione ai dati di ciascun paese. Tuttavia, ci sono valori mancanti nei dati che causano errori nella stima dei modelli.
Nel tuo workspace hai una lista di data frame, ls_df, in cui ogni elemento contiene i dati di un dato paese. Hai intenzione di parallelizzare con parLapply() e usare tryCatch() per intercettare gli errori. Il pacchetto parallel è già stato caricato per te.
Questo esercizio fa parte del corso
Programmazione parallela in R
Istruzioni dell'esercizio
- Fornisci una funzione all'argomento error. Questa funzione deve prendere un argomento,
e, e usarepaste()per mettere la stringa"Error!"prima die. - Modifica
fit_lm()per controllare semodelè una stringa di caratteri che contiene il messaggio di errore. - Crea un cluster con sei core.
- Applica
fit_lm()alla listals_dfin parallelo usandoparLapply().
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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!"))