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

From: Peter Dalgaard <p.dalgaard_at_biostat.ku.dk>
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.