시작하기무료로 시작하기

모델링 오류 잡기

출생 시 기대수명은 인구 건강을 나타내는 핵심 지표예요.

여러분은 공중보건 분야의 컨설턴트 연구원으로 일하고 있어요. 의뢰인은 의료비에 1달러를 더 쓸 때 기대수명이 얼마나 증가하는지 알고 싶어 합니다. 2001년부터 2021년까지 모든 국가의 기대수명(연 단위)과 1인당 의료비 지출 데이터를 수집해 두었어요. 통계 컨설턴트가 각 국가별 데이터에 회귀모형을 적합하는 코드를 작성했지만, 데이터에 결측값이 있어 모형 적합 시 오류가 발생하고 있어요.

작업 공간에는 각 원소가 특정 국가의 데이터인 데이터 프레임 리스트 ls_df가 있어요. parLapply()로 병렬화하고 tryCatch()로 오류를 잡으려 합니다. parallel 패키지는 미리 로드되어 있어요.

이 연습은 강의의 일부입니다

R의 병렬 프로그래밍

강의 보기

연습 안내

  • error 인자에 함수를 전달하세요. 이 함수는 인자 e를 하나 받고, paste()를 사용해 "Error!" 문자열을 e 앞에 붙이세요.
  • fit_lm()을 수정해 model이 오류 메시지를 담은 문자형인지 확인하세요.
  • 코어 6개로 클러스터를 만드세요.
  • parLapply()를 사용해 리스트 ls_dffit_lm()을 병렬로 적용하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

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!"))
코드 편집 및 실행