モデリングエラーを捕捉する
出生時平均余命は、集団の健康状態を示す主要な指標です。
あなたは公衆衛生のコンサルタント研究者として働いています。クライアントは、医療に 1 ドル支出するごとの平均余命の増加量を知りたいと考えています。2001 年から 2021 年までの全ての国について、平均余命(年)と 1 人あたり医療費のデータを収集しました。コンサルティング統計家が、各国のデータに回帰モデルを当てはめるコードを書きましたが、データに欠損値が含まれており、モデル当てはめでエラーが起きています。
ワークスペースには、各要素が特定の国のデータであるデータフレームのリスト ls_df があります。parLapply() で並列化し、tryCatch() でエラーを捕捉する予定です。parallel パッケージは読み込まれています。
この演習はコースの一部です
R による並列プログラミング
演習の手順
- error 引数に関数を指定してください。この関数は 1 つの引数
eを取り、paste()を使って文字列"Error!"をeの前につけます。 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!"))