Chapter 24 エラー処理

プログラムの正常な進行が妨げられる自体が起きた場合には、エラーメッセージ(C++ 例外)を発し、プログラムをストップさせることができます。

24.1 stop()とwarning()

プログラムの正常な進行が妨げられる事態が起きた場合には、stop() 関数を用いてエラーメッセージを表示し実行を停止させることができます。プログラムの進行を停止せずに、ユーザーに警告を発したい場合は warning() 関数を用います。関数 stop()warning() のどちらとも Rprintf() 関数と同じように書式を指定してメッセージを表示することができます。

stop("Error: Unexpected condition occurred");
stop("Error: Column %i is not numeric.", i+1);

warning("Warning: Unexpected condition occurred");
warning("Warning: Column %i is not numeric.", i+1);

下のコード例では、関数に与えた数値がマイナスであった場合にエラーを出力して実行を停止します。

// [[Rcpp::export]]
double rcpp_log(double x) {
    if (x <= 0.0) {
        stop("'x' must be a positive value.");
    }
    return log(x);
}

実行結果

> rcpp_log(-1)
 エラー: 'x' must be a positive value.

24.2 C++ 例外を投げる

throw exception() を使うことで、C++ の例外を throw する事もできます。

throw exception("Unexpected condition occurred");