From murdoch.duncan at gmail.com  Fri Dec 17 15:58:52 2010
From: murdoch.duncan at gmail.com (Duncan Murdoch)
Date: Fri, 17 Dec 2010 09:58:52 -0500
Subject: [Rd] Surprising behavior of letters[c(NA, NA)]
In-Reply-To: <AANLkTikMgfMC35MPrr7DGtToovTFsbWMrM3fGX=bskA3@mail.gmail.com>
References: <AANLkTikMgfMC35MPrr7DGtToovTFsbWMrM3fGX=bskA3@mail.gmail.com>
Message-ID: <4D0B7AAC.4070602@gmail.com>

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



[Rd] Surprising behavior of letters[c(NA, NA)]
Duncan Murdoch