Modellierungsfehler abfangen
Die Lebenserwartung bei der Geburt ist ein wichtiger Indikator für die Gesundheit einer Bevölkerung.
Du arbeitest als beratender Public-Health-Forschender. Dein Kunde möchte wissen, wie stark die Lebenserwartung pro zusätzlich ausgegebenem US-Dollar im Gesundheitswesen steigt. Du hast Daten zur Lebenserwartung (in Jahren) für alle Länder sowie zu deren Gesundheitsausgaben pro Kopf für die Jahre 2001 bis 2021 zusammengetragen. Die beratende Statistikexpertin hat Code geschrieben, um für jedes Land Regressionsmodelle zu fitten. Allerdings gibt es fehlende Werte in den Daten, die beim Modell-Fitting zu Fehlern führen.
In deinem Workspace hast du eine Liste von Data Frames, ls_df, wobei jedes Element die Daten eines bestimmten Landes enthält. Du planst, mit parLapply() zu parallelisieren und tryCatch() zu verwenden, um Fehler abzufangen. Das Paket parallel wurde bereits für dich geladen.
Diese Übung ist Teil des Kurses
Paralleles Programmieren in R
Anleitung zur Übung
- Übergib dem Argument error eine Funktion. Diese Funktion soll ein Argument
eannehmen und mitpaste()den String"Error!"voresetzen. - Bearbeite
fit_lm(), sodass geprüft wird, obmodelein Character-String ist, der die Fehlermeldung enthält. - Erstelle einen Cluster mit sechs Kernen.
- Wende
fit_lm()parallel mitparLapply()auf die Listels_dfan.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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!"))