Matt Bannert Matt Bannert - 1 month ago 10
R Question

Better error message for stopifnot?

I am using

stopifnot
and I understand it just returns the first value that was not
TRUE
. I f that is some freaky dynamic expression someone who is not into the custom function cannot really make something out of that. So I would love to add a custom error message. Any suggestions?

Error: length(unique(nchar(check))) == 1 is not TRUE


Basically states that the elements of the vector
check
do not have the same length.
Is there a way of saying:
Error: Elements of your input vector do not have the same length!
?

Answer

Use stop and an if statement:

if(length(unique(nchar(check))) != 1) 
  stop("Error: Elements of your input vector do not have the same length!")

Just remember that stopifnot has the convenience of stating the negative, so your condition in the if needs to be the negation of your stop condition.


This is what the error message looks like:

> check = c("x", "xx", "xxx")
> if(length(unique(nchar(check))) != 1) 
+   stop("Error: Elements of your input vector do not have the same length!")

Error in eval(expr, envir, enclos) : 
  Error: Elements of your input vector do not have the same length!
Comments