[R] stopifnot() doesnt work as I expect it to. Are my expectations correct?

William Dunlap wdunlap at tibco.com
Fri May 20 16:33:01 CEST 2016


The following usage of stopifnot seems reasonable to me and it
would be nice if the 2nd call caused the message 'is.data.frame(df) is not
TRUE'.

f <- function(df) {
    stopifnot(is.data.frame(df), is.integer(df$ID))
    range(df$ID)
}
f(data.frame(ID=4:7))
# [1] 4 7
f(4:7)
# Error in df$ID : $ operator is invalid for atomic vectors


Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, May 20, 2016 at 7:13 AM, Duncan Murdoch <murdoch.duncan at gmail.com>
wrote:

> On 20/05/2016 4:44 AM, Vasanth Mohan wrote:
>
>> Hi,
>>
>> *stopifnot(FALSE, someOtherExpression)*
>>
>> For the above code I expect stopifnot() to always say that 'FALSE is not
>> TRUE' regardless of what someOtherExpression is(It may evaluate to TRUE or
>> FALSE or throw an error). Is my expectation correct? Is that how
>> stopifnot() is supposed to work?
>>
>> The present implementation of stopifnot() does not work like that. If
>> someOtherExpression would throw an error, then stopifnot() throws that
>> error instead of saying 'FALSE is not TRUE'.
>>
>> So, I modified the source code of stopifnot() and now it works as I expect
>> it to.
>> If that is how stopifnot() is supposed to work, then kindly let me know
>> how
>> I can contribute my solution
>>
>>
> The documentation is unclear on that.  First it implies all expressions
> are evaluated:  "If any of the expressions in ... are not all TRUE, stop is
> called, producing an error message indicating the first of the elements of
> ... which were not true."
>
> But then the "conceptually equivalent" code acts the way you expected.
>
> However, it doesn't really make sense to me to put in tests that could
> themselves trigger errors unless you'd be interested in seeing those
> errors, so I don't think I'd change it.
>
> Duncan Murdoch
>
> ______________________________________________
> R-help at 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list