web-dev-qa-db-ja.com

RにはPythonのようなアサートステートメントがありますか?

何かが真かどうかをチェックし、そうでない場合は特定のエラーメッセージを出力して終了するステートメント

95
Dan

stopifnot()

Runittestthat のような単体テスト用のパッケージにも興味があるかもしれません。

121
Harlan

@ニック:

プログラムでエラーをスローする条件をテストするために、わかりやすい名前で関数を記述する場合、エラーメッセージを制御できます。以下に例を示します。

Less_Than_8 = function(x) return(x < 8)

for (i in 1:10)
{
  print(i)
  stopifnot(Less_Than_8(i))
}

これにより、1から8までの数字が出力され、その後、

Error: Less_Than_8(i) is not TRUE

かっこ内の「i」がテストに失敗した値に置き換えられればいいのですが、あなたはあなたが支払うものを手に入れます。

それよりも手の込んだものが必要な場合は、Runitを調べて、Harlanが提案したとおりにテストしてください。

12
CCC

これはstopコマンドで実現できます。このコマンドは、関数の実行を停止し、エラーメッセージを出力します。たとえば、変数somethingがfalseかどうかをテストできます。

if(something == FALSE){
   stop("error message to print)
}

同様に、warningコマンドは警告を出力します(ただし、コードの実行は継続します)。

if(something == FALSE){
   warning("error message to print)
}

これらは両方ともベースRによって提供され、実行するパッケージを必要とせず、独自の関数を作成する際に含める必要もありません。私はこのアプローチがより少ない依存性でコードを書くことを好み、この構文はパッケージ開発で広く使用されています。ただし、同様の機能は、assert_that Hadleyの「整頓された」の一部として最近リリースされた機能。

3
Tom Kelly