stopifnot
位於 base
包(package)。 說明
如果任何表達式(在 ...
或 exprs
中)不是 all
TRUE
,則調用 stop
,並生成一條錯誤消息,指示第一個表達式 ( all
) 不為 true。
用法
stopifnot(..., exprs, exprObject, local = TRUE)
參數
... , exprs |
任意數量的R表達式,每個表達式的計算結果應為(所有表達式的邏輯向量) { expr1 expr2 .... } 請注意,例如,正數是不是 如果向 |
exprObject |
|
local |
(僅當使用 |
細節
此函數旨在用於回歸測試或函數的參數檢查,特別是使它們更易於閱讀。
stopifnot(A, B)
或等效的 stopifnot(exprs= {A ;
B})
在概念上等同於
{ if(any(is.na(A)) || !all(A)) stop(...); if(any(is.na(B)) || !all(B)) stop(...) }
自從R版本3.6.0,stopifnot()
不再處理潛在的錯誤或警告(通過tryCatch()
等)對於每個單個表達式並且可以使用sys.call(<n>)
如果表達式的計算結果不全為 TRUE,則獲取有意義且簡短的錯誤消息。這提供了相當少的開銷。
自從R版本 3.5.0,表達式是按順序評估,因此一旦出現“non-TRUE”,評估就會停止,如上述概念等價語句所示。
另外,自從R版本3.5.0,stopifnot(exprs = { ... })
可以交替使用,並且在多個表達式的情況下可能更可取,因為它們更方便地交互評估(“沒有無關的,
”)。
自從R版本 3.4.0,當表達式(來自...
) 不正確和是一個電話all.equal
,錯誤消息將報告由報告的(第一部分)差異all.equal(*)
;自從R4.3.0,所有調用都會發生這種情況"all.equal"
pmatch()
es 被調用的函數,例如,當調用該函數時all.equalShow
,請參閱中的示例all.equal
.
值
(NULL
如果 ...
中的所有語句都是 TRUE
。)
注意
嘗試通過快捷方式使用 stopifnot(exprs = ..)
版本,例如,
assertWRONG <- function(exprs) stopifnot(exprs = exprs)
是微妙的,上麵不是一個好主意。與 stopifnot()
不同,stopifnot()
會逐個評估 exprs
的各個部分並在第一個非 TRUE 處停止,上述快捷方式通常會評估 exprs
的所有部分並傳遞結果,即通常為exprs
到 stopifnot()
的最後一個條目。
然而,更仔細的版本,
assert <- function(exprs) eval.parent(substitute(stopifnot(exprs = exprs)))
使用更常見的動詞作為函數名稱來調用 stopifnot(exprs = *)
可能是一個不錯的捷徑。
例子
stopifnot(1 == 1, all.equal(pi, 3.14159265), 1 < 2) # all TRUE
m <- matrix(c(1,3,3,1), 2, 2)
stopifnot(m == t(m), diag(m) == rep(1, 2)) # all(.) |=> TRUE
op <- options(error = expression(NULL))
# "disabling stop(.)" << Use with CARE! >>
stopifnot(length(10)) # gives an error: '1' is *not* TRUE
## even when if(1) "ok" works
stopifnot(all.equal(pi, 3.141593), 2 < 2, (1:10 < 12), "a" < "b")
## More convenient for interactive "line by line" evaluation:
stopifnot(exprs = {
all.equal(pi, 3.1415927)
2 < 2
1:10 < 12
"a" < "b"
})
eObj <- expression(2 < 3, 3 <= 3:6, 1:10 < 2)
stopifnot(exprObject = eObj)
stopifnot(exprObject = quote(3 == 3))
stopifnot(exprObject = TRUE)
# long all.equal() error messages are abbreviated:
stopifnot(all.equal(rep(list(pi),4), list(3.1, 3.14, 3.141, 3.1415)))
# The default error message can be overridden to be more informative:
m[1,2] <- 12
stopifnot("m must be symmetric"= m == t(m))
#=> Error: m must be symmetric
options(op) # revert to previous error handler
##' warnifnot(): a "only-warning" version of stopifnot()
##' {Yes, learn how to use do.call(substitute, ...) in a powerful manner !!}
warnifnot <- stopifnot ; N <- length(bdy <- body(warnifnot))
bdy <- do.call(substitute, list(bdy, list(stopifnot = quote(warnifnot))))
bdy[[N-1]] <- do.call(substitute, list(bdy[[N-1]], list(stop = quote(warning))))
body(warnifnot) <- bdy
warnifnot(1 == 1, 1 < 2, 2 < 2) # => warns " 2 < 2 is not TRUE "
warnifnot(exprs = {
1 == 1
3 < 3 # => warns "3 < 3 is not TRUE"
})
也可以看看
stop
,warning
; tools
包中的 assertCondition
補充了 stopifnot()
,用於測試警告和錯誤。
相關用法
- R stop 停止函數執行
- R strsplit 分割字符向量的元素
- R strtoi 將字符串轉換為整數
- R strrep 重複字符向量的元素
- R standardGeneric 形式化方法係統 – 調度 S4 方法
- R startsWith 字符串是否以另一個字符串開頭或結尾?
- R strwrap 將字符串換行以設置段落格式
- R strptime 與字符之間的日期時間轉換函數
- R strtrim 將字符串修剪為指定的顯示寬度
- R structure 屬性規範
- R seq.Date 生成規則的日期序列
- R search 給出 R 對象的搜索路徑
- R solve 求解方程組
- R scan 讀取數據值
- R sprintf 使用 C 風格字符串格式化命令
- R sign 標誌函數
- R svd 矩陣的奇異值分解
- R source 從文件、連接或表達式中讀取 R 代碼
- R sQuote 引用文字
- R switch 選擇替代方案列表之一
- R substitute 替換和引用表達式
- R split 分組並重新集合
- R slice.index 數組中的切片索引
- R sort 對向量進行排序或排序
- R sequence 創建序列向量
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Ensure the Truth of R Expressions。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。