> On 13 Dec 2015, at 20:31 , William Dunlap <wdun...@tibco.com> wrote: > >> as Bill or Jeff explained, "the empty set is always true" > > My wording was that any(logical(0)) is FALSE because "there are no > TRUEs in logical(0)".
Yes. My mind still boggles over how the empty set slipped into Boolean algebra. Another way of flogging the horse is to say that we want[*] any(c(x,y)) == any(x) | any(y) even if x has length 0. In that case c(x,y) == y, so we must have any(y) == any(logical(0)) | any(y) which holds for all y if and only if any(logical(0)) is FALSE. Also, as I tried to say before, any() is to "|" what sum() is to "+" and what all() is to "&" and prod() is to "*". All the operators have an identity element, namely FALSE, 0, TRUE, and 1 respectively, and the generic convention is that for an empty vector, we return the identity element, for the reason given above. Peter D. [*] Assuming logical vectors here. Coercion might well do odd things... > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > > On Sat, Dec 12, 2015 at 1: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}. >> >> 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. > > ______________________________________________ > 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. -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Office: A 4.23 Email: pd....@cbs.dk Priv: pda...@gmail.com ______________________________________________ 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.