НачатьНачать бесплатно

Перехват ошибок при построении моделей

Ожидаемая продолжительность жизни при рождении — один из ключевых показателей здоровья населения.

Вы работаете консультантом в области общественного здравоохранения. Ваш клиент хочет узнать, насколько увеличивается продолжительность жизни на каждый доллар, потраченный на здравоохранение. Вы собрали данные о продолжительности жизни (в годах) для всех стран и соответствующих расходах на здравоохранение на душу населения за период с 2001 по 2021 год. Статистик-консультант написал код для подгонки регрессионных моделей к данным по каждой стране. Однако в данных есть пропущенные значения, которые вызывают ошибки при построении моделей.

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

Это упражнение является частью курса

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

Посмотреть курс

Инструкции к упражнению

  • Передайте функцию в аргумент error. Эта функция должна принимать один аргумент e и использовать paste(), чтобы добавить строку "Error!" перед e.
  • Измените fit_lm() так, чтобы она проверяла, является ли model символьной строкой с сообщением об ошибке.
  • Создайте кластер из шести ядер.
  • Примените 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!"))
Редактировать и запускать код