Rにはpythonのようにassertステートメントがありますか?


97

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

回答:


123

stopifnot()

ユニットテストのためにRunittestthatのようなパッケージに興味があるかもしれません。


stopifnot()が停止した場合に報告されるエラーメッセージを制御する方法はありますか?
Nick

12
@ニック、いいえ。stopifnot()妥当性テストに使用して、コードが想定どおりに動作していることをテストしますがif (blahdiblah) stop("error message")、入力テストに使用すると、プログラムへの入力が有効であることをテストします。通常の使用では、後者のみが発生します。
Harlan

6
また、ハドレーの新しい参照してくださいassertthatより良い答えを与え、パッケージ、stopifnotありませんが:github.com/hadley/assertthat
ハーラン

12

@ニック:

プログラムでエラーをスローする条件をテストするための説明的な名前で関数を作成する場合、エラーメッセージを制御できます。次に例を示します。

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の提案どおりにテストしてください。


関数定義を内部に置くこともできstopifnot()ます。
naught101 2013年

2
naught101、名前付き関数でテストを行うポイントは、エラーメッセージに出力されるテストの名前を取得することです
Matthew

4

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.