自訂錯誤邏輯
有時候 assertive 套件裡的 assert_*() 函式所提供的錯誤訊息不夠具體。例如,用來檢查數值是否落在範圍內的斷言,只會告訴使用者某個值超出範圍,卻不會說明為什麼這是個問題。遇到這種情況,你可以把 is_*() 函式和訊息、警告或錯誤搭配使用,來自訂回饋內容。
調和平均只在 x 的所有值都為正時才有意義。(試著計算 1 與 -1 的調和平均就知道原因了。)請讓你的使用者知道這一點!
本練習屬於課程
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)