R パッケージ (S3 スタイル) のエンドユーザー関数が引数を検証し、特定の有効性チェックが失敗したときにユーザーに有益なエラーまたは警告を与えるようにしたいと考えています。
これを行うための明白な (しかし退屈で保守不可能な) 方法は次のようになります。
foo<-function(aa,bb,cc,dd){
if(length(aa)!=1) stop("The argument 'aa' must have a single value");
if(!is.numeric(aa)) stop("The argument 'aa' must be numeric");
if(!is.character(bb)) stop("The argument 'bb' must be a character");
if(length(bb)>=4||length(bb)<=2) stop("The argument 'bb' must be a vector with a length between 2 and 4");
if(!is.recursive(cc)) stop("The argument 'cc' must be a list-like object");
if(!is.integer(dd)) stop("The argument 'dd' must contain only integers");
if(any(dd<aa)) stop("All values in the argument 'dd' must be greater than the value of argument 'aa'");
## ...and so on
}
これを行うのは私が最初ではないと思います。では、そのような検証タスクのすべてまたは一部を自動化するパッケージを提案できる人はいますか? または、それに失敗して、醜さを各関数内でできるだけ少ない行に制限するいくつかの簡潔で一般的な慣用句はありますか?
ありがとう。