Marc Schwartz wrote: > Hi all, > > Came across this curious behavior in: > > R version 2.5.0 Patched (2007-06-05 r41831) > > > A simplified example is: > > >> all(c(NA, NA, NA) > NA, na.rm = TRUE) >> > [1] TRUE > > > Is this expected by definition? > > If one reduces this to individual comparisons, such as : > > >> NA > NA >> > [1] NA > > >> all(NA > NA) >> > [1] NA > > >> all(NA > NA, na.rm = TRUE) >> > [1] TRUE > > the initial comparison on the 3 element vector would be consistent with > the last example. > > If one evaluates each side of the comparison within the parens in the > initial example, you get something along the lines of the following: > > x <- c(NA, NA, NA) > x <- x[!is.na(x)] # remove NA's (eg. mean.default(x, na.rm = TRUE)) > > >> x >> > logical(0) > > >> logical(0) > NA >> > logical(0) > > >> all(logical(0)) >> > [1] TRUE > > > 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 > > > If the initial comparison of logical(0) returns logical(0), which is not > TRUE: > > >> logical(0) == TRUE >> > logical(0) > > 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. > The value returned is TRUE if all of the values in x are TRUE, and FALSE > if any of the values in x are FALSE. > If na.rm = FALSE and x consists of a mix of TRUE and NA values, the > value is NA. > > > > Does this make any sense? > I don't see the problem. Isn't it just that all(logical(0))==TRUE by convention just like prod(numeric(0))==1 etc.?
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel