攔截模型錯誤
出生時平均餘命是衡量人口健康的重要指標。
你是一名公衛研究顧問。你的客戶想知道,每花 1 美元在醫療照護上,平均餘命會增加多少。你已經蒐集了 2001 至 2021 年所有國家的平均餘命(以年為單位)及其對應的人均醫療支出資料。統計顧問已撰寫程式碼,為各國資料擬合迴歸模型。不過,資料中有遺漏值,導致模型擬合時發生錯誤。
你的工作空間中有一個資料框清單 ls_df,每個元素代表一個國家的資料。你打算使用 parLapply() 進行平行化,並用 tryCatch() 攔截錯誤。parallel 套件已為你載入。
本練習屬於課程
R 平行程式設計
練習說明
- 在 error 參數中提供一個函式。此函式需接受一個參數
e,並用paste()在e前加上字串"Error!"。 - 編輯
fit_lm(),檢查model是否為包含錯誤訊息的字元字串。 - 建立一個含 6 個核心的叢集。
- 使用
parLapply()將fit_lm()平行套用到清單ls_df。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
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!"))