[R] stopifnot with logical(0)
peter dalgaard
pdalgd at gmail.com
Mon Dec 14 00:30:10 CET 2015
> On 13 Dec 2015, at 20:31 , William Dunlap <wdunlap at 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
> <maechler at stat.math.ethz.ch> wrote:
>>>>>>> Henrik Bengtsson <henrik.bengtsson at gmail.com>
>>>>>>> on Fri, 11 Dec 2015 08:20:55 -0800 writes:
>>
>>> On Fri, Dec 11, 2015 at 8:10 AM, David Winsemius <dwinsemius at comcast.net> wrote:
>>>>
>>>>> On Dec 11, 2015, at 5:38 AM, Dario Beraldi <dario.beraldi at 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 at 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 at 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.mes at cbs.dk Priv: PDalgd at gmail.com
More information about the R-help
mailing list