>>>>> 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.