R での条件処理に tryCatch 関数を使用する

胡金庫 2021年7月16日
R での条件処理に tryCatch 関数を使用する

この記事では、R での条件処理に tryCatch 関数を使用する複数の方法を示します。

tryCatch を使用して R のエラー状態を処理する

R 言語では、3 種類の組み込み条件が提供されており、コードからの例外としてスローできます。従来、最も深刻なものはエラーと呼ばれ、通常は機能を終了するか、実行が停止します。次に、関数の実行中にエラーが発生したかどうかを示す警告が表示されますが、問題を部分的に処理することはできます。最後に、いくつかの軽度の問題についてユーザーに通知するために使用されるメッセージがあります。これらの 3つの条件には、stopwarning、および message という名前の対応する関数があり、これらを呼び出して特定の条件を発生させることができます。

f1 <- function(x) {
  cat("log(", x, ") = ", (log(x)))
}

f1(10)

出力:

log( 10 ) = [1] 2.302585

たとえば、前のコードは、単一の引数 x を取り、log(x) の結果をいくつかの追加のフォーマットで出力する f1 という名前の関数を定義しています。ユーザーが数値以外の引数を f1 関数に渡すと、エラーがスローされることに注意してください。ハンドラーを tryCatch 関数に登録することで、このエラーを処理できます。

f1 <- function(x) {
  cat("log(", x, ") = ", (log(x)))
}

f1("f")

出力:

Error in log(x) : non-numeric argument to mathematical function

ハンドラーを登録すると、このエラーのデフォルトコードがユーザー指定のコードで上書きされることに注意してください。次の例は、デフォルトのエラーメッセージがカスタム出力文字列に置き換えられる方法を示しています。一方、エラー状態が発生しない場合、以下の関数は正常に動作します。

f1 <- function(x) {
  tryCatch(
    error = function(cnd) "The custom output that we need to print",
    cat("log(", x, ") = ", (log(x)))
  )
}

f1("f")

出力:

[1] "The custom output that we need to print"

tryCatch 関数の一般的な使用法は、エラー条件がスローされたときに実行する必要があるコードブロックを実装することです。error = function(cnd) 行の後の中括弧でエラーが発生したときに実行されるコードブロックを指定します。エラーコードブロックの後の次の行は、通常、ハンドラーがアクティブなときに実行されます。

f1 <- function(x) {
  tryCatch(
    error = function(cnd) {
      print("hello")
      log(10)
    },
    cat("log(", x, ") = ", (log(x)))
  )
}

f1("x")

出力:

[1] "hello"
[1] 2.302585
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook