[R] list: index of the element, that is TRUE

Hadley Wickham hadley at rice.edu
Mon Jan 16 18:15:11 CET 2012


On Mon, Jan 16, 2012 at 10:15 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> On 12-01-16 10:34 AM, Marion Wenty wrote:
>>
>> Dear People,
>>
>> I have got the following example for a vector and the index of the TRUE
>> element:
>>
>> Myvector<- c(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE)
>> which(Myvector)
>>
>> Now I would like to find out the same for a list:
>>
>> Mylist<- list(FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,FALSE,TRUE)
>>
>> ...
>>
>> Does anyone know how to do this?
>
>
> What are the possible values in your list?  If it always contains TRUE and
> FALSE and nothing else, then unlist() will work (as suggested by others).
>  If there are other possibilities, unlist() might mess up, e.g.
>
> unlist( list(TRUE, 1:3, FALSE) )
>
> won't give a vector of length 3.  In that case,
>
> which(sapply(MyList, isTRUE) )

Or if you're writing a function:

which(vapply(MyList, isTRUE, logical(1)))

which will work even if length(MyList) == 0

Hadley

-- 
Assistant Professor / Dobelman Family Junior Chair
Department of Statistics / Rice University
http://had.co.nz/



More information about the R-help mailing list