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. -thomas Thomas Lumley Assoc. Professor, Biostatistics [EMAIL PROTECTED] University of Washington, Seattle ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel