[R] apply for nested lists

Alexandre Sanchez Pla asanchez at ub.edu
Wed Jan 26 17:49:58 CET 2005


Hi,

I am working with lists whose terms are lists whose terms are lists. Although 
the real ones contain locuslink identifiers and GO annotations (I work with the 
Bioconductor GO) package, I have prepared an simplified example of what I have 
and what I would like to do with it:

Imagine I have a list such as:

tst.list<-list("1"=list("1A"=list(ID="1A",VAL=172),"1B"=list
(ID="1B",VAL=134),"1C"=list(ID="1C",VAL=0)),"2"=list("2A"=NA),"3"=list("3A"=list
(ID="3A",VAL=33),"3B"=list(ID="3B",VAL=2)))

I would like, for instance, to be able to extract some values such as the 
content of the "VAL" field, which may sometimes not be available.
I may do it using a nested for such as:

x<-character(0)
for (i in 1:length(tst.list)){
    if (!is.na(tst.list[[i]][[1]][[1]])){
        for (j in 1:length(tst.list[[i]]))
            {x<-c(x,tst.list[[i]][[j]]$VAL)}}
    else    
            {x<-c(x, NA)}}

which gives me what I need

> x
[1] "172" "134" "0"   NA  "33"  "2"  

According to most R documents this may be done more efficiently using apply 
instructions, but I have failed in my temptatives to obtain the same

Thanks for any help.

Alex


-- 
Dr.Alex Sánchez
Departament d'Estadística.
Universitat de Barcelona
asanchez at ub.edu




More information about the R-help mailing list