From: Peter Dalgaard <p.dalgaard_at_biostat.ku.dk>

Date: Wed, 20 Jun 2007 18:37:15 +0200

R-devel_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 20 Jun 2007 - 17:22:55 GMT

Date: Wed, 20 Jun 2007 18:37:15 +0200

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_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-devel Received on Wed 20 Jun 2007 - 17:22:55 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 - 20:37:17 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.
*