我希望R包(S3樣式)中的最終用戶函數驗證其參數,並在特定有效性檢查失敗時爲用戶提供信息錯誤或警告。R函數的半自動化參數驗證
明顯(但繁瑣且難以維護)的方式來做到這一點是:
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
}
我假設我遠遠不是第一個做到這一點。那麼,有沒有人可以建議一個能夠自動完成全部或部分驗證任務的軟件包?或者,如果不這麼做,那麼一些簡潔的通用成語會將每個函數中的醜化限制爲儘可能少的行數?
謝謝。
另請參見[assertthat](https:// githu b.com/hadley/assertthat),它試圖像'stopifnot',但有更好的錯誤信息。 – hadley