On 17/12/2010 9:32 AM, Gabor Grothendieck wrote:
Consider this:
> letters[c(2, 3)]
[1] "b" "c"
> letters[c(2, NA)]
[1] "b" NA
> letters[c(NA, 3)]
[1] NA "c"
> letters[c(NA, NA)]
[1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[26] NA
The result is a 2-vector in each case until we get to c(NA, NA) and
then it unexpectedly changes from returning a 2-vector to returning a
26-vector. I think most people would have expected that the answer
would be c(NA, NA).
This is because c(NA, NA) is a logical vector, so it gets recycled to
the length of letters, whereas c(NA, 3) and the others are numeric
vectors, so they aren't recycled, they're converted to integer indices.
So the surprise is due to not recognizing that NA is logical. You
wouldn't expect a length 1 result from letters[TRUE], would you?
Duncan Murdoch
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel