>>>>> Henrik Bengtsson <henrik.bengts...@gmail.com>
>>>>>     on Fri, 11 Dec 2015 08:20:55 -0800 writes:

    > On Fri, Dec 11, 2015 at 8:10 AM, David Winsemius <dwinsem...@comcast.net> 
wrote:
    >> 
    >>> On Dec 11, 2015, at 5:38 AM, Dario Beraldi <dario.bera...@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

______________________________________________
R-help@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.

Reply via email to