カスタムエラーのロジック
ときどき、assertive の assert_*() 関数は、それほど分かりやすいエラーメッセージを出してくれないことがあります。たとえば、数値が範囲内にあるかを確かめるアサーションは、値が範囲外だとは教えてくれますが、なぜそれが問題なのかまでは説明しません。そんな場合は、is_*() 関数とメッセージ・警告・エラーを組み合わせて、カスタムのフィードバックを定義できます。
調和平均は、x の値がすべて正であるときにのみ意味があります。(1 とマイナス1の調和平均を計算してみると理由が分かります。)この点をユーザーに必ず伝えるようにしましょう!
この演習はコースの一部です
R関数入門
演習の手順
xに非正の値(NAは無視)が1つでも含まれていたら、エラーを投げてください。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)