[R] stopifnot with logical(0)
Martin Maechler
maechler at stat.math.ethz.ch
Sat Dec 12 10:54:11 CET 2015
>>>>> Henrik Bengtsson <henrik.bengtsson at gmail.com>
>>>>> on Fri, 11 Dec 2015 08:20:55 -0800 writes:
> On Fri, Dec 11, 2015 at 8:10 AM, David Winsemius <dwinsemius at comcast.net> wrote:
>>
>>> On Dec 11, 2015, at 5:38 AM, Dario Beraldi <dario.beraldi at gmail.com> wrote:
>>>
>>> Hi All,
>>>
>>> I'd like to understand the reason why stopifnot(logical(0) == x) doesn't
>>> (never?) throw an exception, at least in these cases:
>>
>> The usual way to test for a length-0 logical object is to use length():
>>
>> x <- logical(0)
>>
>> stopifnot( !length(x) & mode(x)=="logical" )
> I found
> stopifnot(!length(x), mode(x) == "logical")
> more helpful when troubleshooting, because it will tell you whether
> it's !length(x) or mode(x) == "logical" that is FALSE. It's as if you
> wrote:
> stopifnot(!length(x))
> stopifnot(mode(x) == "logical")
> /Henrik
Yes, indeed, thank you Henrik --- and Jeff Newmiller who's nice
humorous reply added other relevant points.
As author stopifnot(), I do agree with Dario's "gut feeling"
that stopifnot() "somehow ought to do the right thing"
in cases such as
stopifnot(dim(x) == c(3,4))
which is really subtle version of his cases
{But the gut feeling is wrong, as I argue from now on}.
Someone writing the above would want stopifnot() to stop in the
case where x is a simple vector instead of a
matrix/data.frame/... with dimensions c(3,4) ... but it will not
because, as Bill or Jeff explained, "the empty set is always
true", and so yes indeed, you have to care about length-0
expressions in stopifnot().
Indeed, in the past, I had thought of "improving" stopifnot()
by giving a warning or even stop() for logical(0) expressions,
but I quickly dismissed that idea after some experiments.
My conclusion: Breaking such a fundamental lemma of logic as
"the empty set is always true"
will lead to all kinds of illogical situations ... so don't do that!
Martin Maechler,
ETH Zurich
More information about the R-help
mailing list