[R] Subsetting a list of vectors

Eric Lecoutre lecoutre at stat.ucl.ac.be
Mon Nov 10 09:02:49 CET 2003


Hi,

I propose here a solution that relies on names of elements:

# From a list, with any names
ll=list(v1=1:4,v2=1:2,v3=5:7,v4=9:11,v5=1,v6=rnorm(4))
# Make a copy to be able to change names
ll2=ll

names(ll2)=rep("a",lengh(ll2))

# Use unlist, which "autobuilds" names based on
# previous names and indexes in # vectors.
# Extracts 3 elements  when they exists

unlist(ll2)[substring(names(unlist(ll2)),2)=="3"]

Eric

At 13:43 10/11/2003 +1300, Hadley Wickham wrote:
>Hi,
>
>I'm trying to subset a list which contains variable length vectors.
>What I want to do is extract (eg.) the 3rd item in each vector (with 
>length >= 3).  At the moment I'm using sapply(list.of.vectors, function(x) 
>{x[3]}).  The problem with this is that sapply returns a list of the same 
>length of list.of.vectors so I end up with a whole lot of null entries 
>from those vectors that aren't long enough.  I have a similar problem if I 
>want to select all the vectors where the 3rd item is a specified value.
>
>Does anyone have any better solutions?
>
>Thanks for you help,
>
>Hadley



--------------------------------------------------
L'erreur est certes humaine, mais un vrai désastre
nécessite un ou deux ordinateurs. Citation anonyme
--------------------------------------------------
Eric Lecoutre
Informaticien/Statisticien
Institut de Statistique / UCL

TEL (+32)(0)10473050       lecoutre at stat.ucl.ac.be
URL http://www.stat.ucl.ac.be/ISpersonnel/lecoutre




More information about the R-help mailing list