On Sat, Dec 12, 2015 at 3:54 AM, Martin Maechler <maech...@stat.math.ethz.ch> wrote: >>>>>> 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}.
Personally, I think the problem there is that people forget that == is vectorised, and for a non-vectorised equality check you really should use identical: stopifnot(identical(dim(x), c(3,4))) Hadley -- http://had.co.nz/ ______________________________________________ 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.