ПочатиПочніть безкоштовно

Перехоплення помилок під час моделювання

Середня очікувана тривалість життя при народженні — ключовий показник здоровʼя населення.

Ви працюєте консультантом-дослідником у сфері громадського здоровʼя. Клієнт хоче дізнатися, на скільки зростає очікувана тривалість життя на кожен долар витрат на охорону здоровʼя. Ви зібрали дані про тривалість життя (у роках) для всіх країн та відповідні витрати на охорону здоровʼя на душу населення за 2001–2021 роки. Консультант зі статистики написав код для побудови регресійних моделей для даних кожної країни. Проте в даних є пропущені значення, які спричиняють помилки під час підгонки моделі.

У вашому робочому середовищі є список датафреймів ls_df, де кожен елемент — це дані окремої країни. Ви плануєте паралелізувати обчислення за допомогою parLapply() і використати tryCatch() для перехоплення помилок. Пакет parallel вже підключено.

Ця вправа є частиною курсу

Паралельне програмування в R

Переглянути курс

Інструкції до вправи

  • Передайте до аргументу error функцію. Вона має приймати один аргумент e і використовувати paste(), щоб додати рядок "Error!" перед e.
  • Відредагуйте fit_lm(), щоб перевіряти, чи model є рядком типу character, що містить повідомлення про помилку.
  • Створіть кластер із шести ядер.
  • Застосуйте fit_lm() до списку ls_df паралельно за допомогою parLapply().

Інтерактивна практична вправа

Спробуйте виконати цю вправу, доповнивши цей зразок коду.

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!"))
Редагувати та запускати код