Surprising behavior of letters[c(NA, NA)]
On Fri, Dec 17, 2010 at 9:58 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
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?
One tends not to distinguish between logical NA's and integer NA's. In fact R represents both of them as NA on output so this does seem highly error prone.
NA # logical
[1] NA
NA_integer_ # integer
[1] NA
Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com