เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ดักจับข้อผิดพลาดในการสร้างโมเดล

อายุคาดเฉลี่ยเมื่อแรกเกิดเป็นตัวชี้วัดสำคัญของสุขภาพประชากร

คุณทำงานเป็นนักวิจัยด้านสาธารณสุขที่ปรึกษา ลูกค้าต้องการทราบว่าการใช้จ่ายด้านการรักษาพยาบาลทุก 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() เพื่อ apply fit_lm() กับ list ls_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!"))
แก้ไขและรันโค้ด