開始使用免費開始

攔截模型錯誤

出生時平均餘命是衡量人口健康的重要指標。

你是一名公衛研究顧問。你的客戶想知道,每花 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!"))
編輯並執行程式碼