Zacznij terazZacznij za darmo

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

Zobacz kurs

Instrukcje do ćwiczenia

  • Przekaż funkcję do argumentu error. Funkcja ta powinna przyjmować jeden argument e i używać paste(), aby umieścić ciąg "Error!" przed e.
  • Zmodyfikuj fit_lm() tak, aby sprawdzała, czy model jest ciągiem znakowym zawierającym komunikat o błędzie.
  • Utwórz klaster z sześcioma rdzeniami.
  • Zastosuj fit_lm() do listy ls_df równolegle, używając parLapply().

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!"))
Edytuj i uruchom kod