모델링 오류 잡기
출생 시 기대수명은 인구 건강을 나타내는 핵심 지표예요.
여러분은 공중보건 분야의 컨설턴트 연구원으로 일하고 있어요. 의뢰인은 의료비에 1달러를 더 쓸 때 기대수명이 얼마나 증가하는지 알고 싶어 합니다. 2001년부터 2021년까지 모든 국가의 기대수명(연 단위)과 1인당 의료비 지출 데이터를 수집해 두었어요. 통계 컨설턴트가 각 국가별 데이터에 회귀모형을 적합하는 코드를 작성했지만, 데이터에 결측값이 있어 모형 적합 시 오류가 발생하고 있어요.
작업 공간에는 각 원소가 특정 국가의 데이터인 데이터 프레임 리스트 ls_df가 있어요. parLapply()로 병렬화하고 tryCatch()로 오류를 잡으려 합니다. parallel 패키지는 미리 로드되어 있어요.
이 연습은 강의의 일부입니다
R의 병렬 프로그래밍
연습 안내
error인자에 함수를 전달하세요. 이 함수는 인자e를 하나 받고,paste()를 사용해"Error!"문자열을e앞에 붙이세요.fit_lm()을 수정해model이 오류 메시지를 담은 문자형인지 확인하세요.- 코어 6개로 클러스터를 만드세요.
parLapply()를 사용해 리스트ls_df에fit_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!"))