ตรรกะข้อผิดพลาดแบบกำหนดเอง
บางครั้งฟังก์ชัน assert_*() ใน assertive อาจให้ข้อความแจ้งข้อผิดพลาดที่ไม่ชัดเจนพอ ตัวอย่างเช่น การตรวจสอบว่าค่าตัวเลขอยู่ในช่วงที่กำหนดหรือไม่จะบอกเพียงว่าค่านั้นอยู่นอกช่วง แต่ไม่ได้อธิบายว่าทำไมถึงเป็นปัญหา ในกรณีนี้ สามารถใช้ฟังก์ชัน is_*() ร่วมกับข้อความ คำเตือน หรือข้อผิดพลาด เพื่อกำหนดข้อความตอบกลับแบบกำหนดเองได้
ค่าเฉลี่ยฮาร์มอนิกจะมีความหมายก็ต่อเมื่อค่าทุกตัวใน x เป็นบวกเท่านั้น (ลองคำนวณค่าเฉลี่ยฮาร์มอนิกของ 1 กับ -1 เพื่อดูว่าทำไม) ควรให้ผู้ใช้รับรู้เรื่องนี้ด้วย
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Introduction to Writing Functions in R
คำแนะนำการฝึกหัด
- หากค่าใดใน
xไม่เป็นบวก (โดยไม่นับNA) ให้โยนข้อผิดพลาด - สังเกตว่าเกิดอะไรขึ้นเมื่อส่งอาร์กิวเมนต์ประเภทอักขระเข้าไปใน
calc_harmonic_mean()
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
calc_harmonic_mean <- function(x, na.rm = FALSE) {
assert_is_numeric(x)
# Check if any values of x are non-positive
if(___(___(___), na.rm = TRUE)) {
# Throw an error
___("x contains non-positive values, so the harmonic mean makes no sense.")
}
x %>%
get_reciprocal() %>%
mean(na.rm = na.rm) %>%
get_reciprocal()
}
# See what happens when you pass it negative numbers
calc_harmonic_mean(std_and_poor500$pe_ratio - 20)