>>>>> Hadley Wickham <h.wick...@gmail.com> >>>>> on Sat, 12 Dec 2015 08:08:54 -0600 writes:
> 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))) You are right "in theory" but practice is less easy: identical() tends to be too subtle for many users ... even yourself (;-), not really of course!), Hadley, in the above case: Your stopifnot() would *always* stop, i.e., signal an error because typically all dim() methods return integer, and c(3,4) is double. So, if even Hadley gets it wrong so easily, I wonder if its good to advertize to always use identical() in such cases. I indeed would quite often use identical() in such tests, and you'd too and would quickly find and fix the "trap" of course.. So you are mostly right also in my opinion... Martin ______________________________________________ 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.