From murdoch at stats.uwo.ca  Tue Feb  9 18:19:22 2010
From: murdoch at stats.uwo.ca (Duncan Murdoch)
Date: Tue, 09 Feb 2010 12:19:22 -0500
Subject: [Rd] Confusing error message for [[.factor (PR#14209)
In-Reply-To: <20100209095009.A817C282EFC8@mail.pubhealth.ku.dk>
References: <20100209095009.A817C282EFC8@mail.pubhealth.ku.dk>
Message-ID: <4B71991A.7030104@stats.uwo.ca>

On 09/02/2010 4:50 AM, g.russell at eos-solutions.com wrote:
> Full_Name: George Russell
> Version: 2.10.0 and 2.11.0 Under development (unstable) (2010-02-08 r51108)
> OS: Windows
> Submission from: (NULL) (217.111.3.131)
>
>
> > c("a","b")[[c(TRUE,FALSE)]]
> Error in `[[.default`(factor(c("a", "b")), c(TRUE, FALSE)) : 
>   recursive indexing failed at level 1
>   

I don't see that.  I get this:

 >  c("a","b")[[c(TRUE,FALSE)]]
Error in c("a", "b")[[c(TRUE, FALSE)]] :
  recursive indexing failed at level 1

which differs because c("a", "b") is not a factor.

> I find this error message confusing, though after reading the HELP carefully I
> think I know what is going on. Would not something like "[[ does not work with
> logical index vectors" be more appropriate?
>   

No, because it sometimes does work with logical index vectors:

 > x <- 1:2
 > x[[TRUE]]
[1] 1

(Here the TRUE is treated as 1.  I think it only works when the logical 
vector contains TRUE values, FALSE will fail, just as x[[0]] fails.)

The problem is that you were asking for the FALSE entry of the TRUE 
entry of the object, and since you had a simple vector, recursive 
indexing fails, and that's what the message says.  I imagine you had 
meant to type c("a", "b")[c(TRUE, FALSE)], but how can R know you meant 
that?

Duncan Murdoch



[Rd] Confusing error message for [[.factor (PR#14209)
Duncan Murdoch