ID EN
I/O & Files

stopifnot

R Base 3.6.2

If any of the expressions (in … or exprs) are not all TRUE, stop is called, producing an error message indicating the first expression which was not (all) true.

Syntax

R
stopifnot(…, exprs, local = TRUE)

Arguments

Parameter Description
…, exprs any number of (typically but not necessarily logical) R expressions, which should each evaluate to (a logical vector of all) TRUE. Use either … or exprs, the latter typically an unevaluated expression of the form{ expr1 expr2 .... }
local (only when exprs is used:) indicates the environment in which the expressions should be evaluated; by default the one where stopifnot() has been called from.

Return Value

(NULL if all statements in … are TRUE.)

Details

This function is intended for use in regression tests or also argument checking of functions, in particular to make them easier to read. stopifnot(A, B) or equivalently stopifnot(exprs= {A ; B}) are conceptually equivalent to { if(any(is.na(A)) || !all(A)) stop(...); if(any(is.na(B)) || !all(B)) stop(...) }Since R version 3.6.0, stopifnot() no longer handles potential errors or warnings (by tryCatch() etc) for each single expression and may use sys.call(<n>) to get a meaningful and short error message in case an expression did not evaluate to all TRUE. This provides considerably less overhead. Since R version 3.5.0, expressions are evaluated sequentially, and hence evaluation stops as soon as there is a “non-TRUE”, as indicated by the above conceptual equivalence statement. Further, when s

Examples

Example
R
# NOT RUN {
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(all.equal(pi, 3.141593),  2 < 2, all(1:10 < 12), "a" < "b")
## More convenient for interactive "line by line" evaluation:
stopifnot(exprs = {
  all.equal(pi, 3.1415927)
  2 < 2
  all(1:10 < 12)
  "a" < "b"
})

# long all.equal() error messages are abbreviated:
stopifnot(all.equal(rep(list(pi),4), list(3.1, 3.14, 3.141, 3.1415)))

options(op)  # revert to previous error handler
# }

See Also

stop warning; assertCondition in package tools complements stopifnot() for testing warnings and errors.