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 -- Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry Indiana University School of Medicine 15032 Hunter Court, Westfield, IN 46074 (317) 490-5129 Work, & Mobile & VoiceMail (317) 204-4202 Home (no voice mail please) mwkimpel<at>gmail<dot>com
Benilton Carvalho
2008-Mar-12 22:00 UTC
[R] subset list based on logical within element flag
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 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 > -- > > Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry > Indiana University School of Medicine > > 15032 Hunter Court, Westfield, IN 46074 > > (317) 490-5129 Work, & Mobile & VoiceMail > (317) 204-4202 Home (no voice mail please) > > mwkimpel<at>gmail<dot>com > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Prof Brian Ripley
2008-Mar-12 22:03 UTC
[R] subset list based on logical within element flag
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:> 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 > -- > > Mark W. Kimpel MD ** Neuroinformatics ** Dept. of Psychiatry > Indiana University School of Medicine > > 15032 Hunter Court, Westfield, IN 46074 > > (317) 490-5129 Work, & Mobile & VoiceMail > (317) 204-4202 Home (no voice mail please) > > mwkimpel<at>gmail<dot>com > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595