Przechwytywanie błędów modelowania
Oczekiwana długość życia przy urodzeniu jest jednym z głównych wskaźników zdrowia populacji.
Pracujesz jako konsultant w dziedzinie zdrowia publicznego. Twój klient chce wiedzieć, o ile wzrasta oczekiwana długość życia na każdy dolar wydany na opiekę zdrowotną. Zebrałeś dane dotyczące oczekiwanej długości życia (w latach) dla wszystkich krajów oraz odpowiadających im wydatków na opiekę zdrowotną per capita w latach 2001–2021. Statystyk współpracujący z projektem napisał kod dopasowujący modele regresji do danych każdego kraju. Niestety dane zawierają braki, które powodują błędy podczas dopasowywania modeli.
W przestrzeni roboczej masz listę ramek danych ls_df, gdzie każdy element zawiera dane dla jednego kraju. Planujesz zrównoleglić obliczenia za pomocą parLapply() i użyć tryCatch() do przechwytywania błędów. Pakiet parallel jest już wczytany.
To ćwiczenie jest częścią kursu
Programowanie równoległe w R
Instrukcje do ćwiczenia
- Przekaż funkcję do argumentu
error. Funkcja ta powinna przyjmować jeden argumentei używaćpaste(), aby umieścić ciąg"Error!"przede. - Zmodyfikuj
fit_lm()tak, aby sprawdzała, czymodeljest ciągiem znakowym zawierającym komunikat o błędzie. - Utwórz klaster z sześcioma rdzeniami.
- Zastosuj
fit_lm()do listyls_dfrównolegle, używającparLapply().
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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!"))