Re: [Rd] Expected behavior from: all(c(NA, NA, NA) < NA, na.rm = TRUE)?

From: Marc Schwartz <marc_schwartz_at_comcast.net>
Date: Wed, 20 Jun 2007 12:01:31 -0500

On Wed, 2007-06-20 at 09:48 -0700, Thomas Lumley wrote:
> On Wed, 20 Jun 2007, Marc Schwartz wrote:
> >
> > If my train of thought is correct, it seems to me that the behavior
> > above distills down to the comparison between logical(0) and NA, which
> > rather than returning NA, returns logical(0).
> >
> > This would seem appropriate, given that there is no actual comparison
> > being made with NA, I think, since logical(0) is an 'empty' vector.
> >
> > However, should all(logical(0)) return TRUE or logical(0)? For example:
> >
> >> logical(0) == logical(0)
> > logical(0)
> >
> >> all(logical(0) == logical(0))
> > [1] TRUE
>
> Yes.
>
> >
> > If the initial comparison of logical(0) returns logical(0), which is not
> > TRUE:
> >
> >> logical(0) == TRUE
> > logical(0)
>
> Yes, they have different lengths, so they aren't equal.
>
> > then why does all() return TRUE, if the individual comparison is not
> > TRUE? By definition from ?all:
> >
> > Given a sequence of logical arguments, a logical value indicating
> > whether or not all of the elements of x are TRUE.
>
> This is the empty set question that should probably be a FAQ.
>
> All elements of logical(0) are TRUE, in the vacuous sense that it has no elements.
>
> The same sort of thing happens for any(logical(0)), which is FALSE; sum(numeric(0)), which is 0; prod(numeric(0)), which is 1; max(numeric(0)),which is -Inf; and min(numeric(0)), which is Inf.
>
>
> This seems as though R is trying to be difficult, but there is a real benefit in terms of associativity:
> all(all(x),all(y)) is always the same as all(x,y) under this definition.
> prod(prod(x), prod(y)) is prod(x,y)
> min(min(x),min(y)) is min(x,y)
> and so on.
>
> The general principle is that a function made by 'reducing' a vector with an associative binary operator, when applied to an empty vector, gives the identity element for the operator. The identity element for AND is TRUE.
>
>
> >
> > Does this make any sense?
> >
>
> Yes, although it is initially surprising.

Thanks to you, Peter and Prof. Ripley for the clarifications. It compelled me to go back and review empty set characteristics and the notion of 'vacuous truth'.

As it turns out, in the course of my search, there is a page on the R Wiki by Tony Plate et al here:

http://wiki.r-project.org/rwiki/doku.php?id=tips:surprises:emptysetfuncs

which covers this and I'll add some comments on this specific example.

I'll just need to add some extra code in my application for these special cases.

Thanks again,

Marc



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 20 Jun 2007 - 17:08:49 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 20 Jun 2007 - 17:35:16 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.