ดักจับข้อผิดพลาดในการสร้างโมเดล
อายุคาดเฉลี่ยเมื่อแรกเกิดเป็นตัวชี้วัดสำคัญของสุขภาพประชากร
คุณทำงานเป็นนักวิจัยด้านสาธารณสุขที่ปรึกษา ลูกค้าต้องการทราบว่าการใช้จ่ายด้านการรักษาพยาบาลทุก 1 ดอลลาร์ส่งผลให้อายุคาดเฉลี่ยเพิ่มขึ้นเท่าใด คุณได้รวบรวมข้อมูลอายุคาดเฉลี่ย (หน่วยเป็นปี) ของทุกประเทศและค่าใช้จ่ายด้านสุขภาพต่อหัวที่สอดคล้องกัน ตั้งแต่ปี 2001 ถึง 2021 นักสถิติที่ปรึกษาได้เขียนโค้ดสำหรับ fit โมเดล regression กับข้อมูลของแต่ละประเทศ อย่างไรก็ตาม ข้อมูลมีค่าที่หายไปซึ่งทำให้เกิดข้อผิดพลาดในการ fit โมเดล
ใน workspace มี list ของ data frame ชื่อ ls_df โดยแต่ละ element คือข้อมูลของประเทศหนึ่ง คุณวางแผนจะ parallelize ด้วย parLapply() และใช้ tryCatch() เพื่อดักจับข้อผิดพลาด โดยได้โหลดแพ็กเกจ parallel ไว้ให้แล้ว
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การเขียนโปรแกรมแบบขนานใน R
คำแนะนำการฝึกหัด
- ส่งฟังก์ชันไปยังอาร์กิวเมนต์ error โดยฟังก์ชันนี้ควรรับอาร์กิวเมนต์หนึ่งตัวคือ
eและใช้paste()เพื่อนำสตริง"Error!"ไว้ก่อนหน้าe - แก้ไข
fit_lm()เพื่อตรวจสอบว่าmodelเป็น character string ที่มีข้อความแสดงข้อผิดพลาดหรือไม่ - สร้าง cluster ที่มี 6 cores
- ใช้
parLapply()เพื่อ applyfit_lm()กับ listls_dfแบบ parallel
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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!"))