Skip to content

subset list based on logical within element flag

5 messages · Mark Kimpel, Benilton Carvalho, Brian Ripley +2 more

#
I have a very long list that I'd like to subset based on a logical value 
within each element. Example below. I'd like to get just those list 
elements for further study whose $sig.cor slot is TRUE. In this example, 
I'd only want element [[2]].

Should be simple, I know. How can I do this? Thanks, Mark

 > gene.pair.tf.lst
[[1]]
[[1]]$gene.pair
[1] "Lgals1:Pxmp2"

[[1]]$sig.cor
[1] FALSE


[[2]]
[[2]]$gene.pair
[1] "Lgals1:Pxmp2"

[[2]]$sig.cor
[1] TRUE


[[3]]
[[3]]$gene.pair
[1] "Lgals1:Pxmp2"

[[3]]$sig.cor
[1] FALSE
#
gene.pair.tf.lst[sapply(gene.pair.tf.lst, "[[", "sig.cor")]

b
On Mar 12, 2008, at 5:24 PM, Mark W Kimpel wrote:

            
#
I'm not sure exactly what you want, but try something like

lapply(gene.pair.tf.lst, function(x) if(x$sig.cor) x$gene.pair)

If you only want the non-NULL entries (and how would you know which they 
are, given you have duplicates?)

gene.pair.tf.lst <- list(list(gene.pair="Lgals1:Pxmp2", sig.cor=FALSE),
     list(gene.pair="Lgals1:Pxmp2", sig.cor=TRUE),
     list(gene.pair="Lgals1:Pxmp2", sig.cor=FALSE))
tmp <- lapply(gene.pair.tf.lst, function(x) if(x$sig.cor) x$gene.pair)
tmp[!sapply(tmp, is.null)]
On Wed, 12 Mar 2008, Mark W Kimpel wrote:

            

  
    
#
Hi I have the smililar question.

I have a list:
my_list <- list(name="Fred", wife="Mary",
no.children=3, child.ages=c(4,7,9))
$name
[1] "Fred"

$wife
[1] "Mary"

$no.children
[1] 3

$child.ages
[1] 4 7 9


Now I want to search "Fred" and get attribute of that
value which is 'name'. 

how do I get it.
[1]  1 NA NA NA

my thinking stops right here... 

list operations in R is too tough to digest and there
is not good documentations. 

Could any one please help. 

thanks
Srini
--- Benilton Carvalho <bcarvalh at jhsph.edu> wrote:

            
#
Try:
[1] "name"

You can break down the two nested calls to figure out what is happening.

-Christos