[R] A stopifnot() nastiness, even if not a bug

peter dalgaard pd@|gd @end|ng |rom gm@||@com
Mon Apr 13 12:00:38 CEST 2020


Inline...

> On 13 Apr 2020, at 11:15 , Martin Maechler <maechler using stat.math.ethz.ch> wrote:
> 
>>>>>> Bert Gunter 
>>>>>>    on Sun, 12 Apr 2020 16:30:09 -0700 writes:
> 
>> Don't know if this has come up before, but ...
>>> x <- c(0,0)
>>> length(x)
>> [1] 2
>> ## but
>>> stopifnot(length(x))
>> Error: length(x) is not TRUE
>> Called from: top level
>> ## but
>>> stopifnot(length(x) > 0)  ## not an error;  nor is
>>> stopifnot(as.logical(length(x)))
>> ## Ouch!
> 
>> Maybe the man page should say something about not assuming automatic
>> coercion to logical, which is the usual expectation. Or fix this.
> 
>> Bert Gunter
> 
> Well, what about the top most paragraph of the help page is not clear here ?
> 
>> Description:
> 
>>     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.
> 

This, however, is somewhat less clear:

..., 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
   
What does it mean, "typically but not necessarily ‘logical’"? The code actually tests explicitly with is.logical, as far as I can tell.

This creates a discrepancy between if(!...)stop(...) and stopifnot(), as in

> f <- function (x) if (!x) stop(paste(deparse(substitute(x)), "is not TRUE"))
> f(0)
Error in f(0) : 0 is not TRUE
> f(1)
> stopifnot(0)
Error: 0 is not TRUE
> stopifnot(1)
Error: 1 is not TRUE

-pd


> If useR's expectations alone would guide the behavior of a
> computer language, the language would have to behave
> "personalized" and give different results depending on the user,
> which may be desirable in medicine or psychotherapy but not with R.
> 
> Martin
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com



More information about the R-help mailing list