始める無料で始める

カスタムエラーのロジック

ときどき、assertiveassert_*() 関数は、それほど分かりやすいエラーメッセージを出してくれないことがあります。たとえば、数値が範囲内にあるかを確かめるアサーションは、値が範囲外だとは教えてくれますが、なぜそれが問題なのかまでは説明しません。そんな場合は、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)
コードを編集して実行