Marianne Promberger
2010-Aug-24 21:49 UTC
[R] Index list by other list (w/ logical elements)?
I have two lists of the same shape, like this: x <- list() x[[1]] <- c("one","two") x[[2]] <- c("three","four","five") y <- list() y[[1]] <- c(TRUE,FALSE) y[[2]] <- c(FALSE,TRUE,TRUE) I would like to index x "by" y, that is, the result in this case should be: z [[1]] [1] "one" [[2]] [1] "four" "five" I was hoping sapply(x,"[",y) would work, but it doesn't. I guess I need to sapply twice, like sapply(x, function() { sapply(y ... but I can't figure it out. Many thanks for any pointers Marianne -- Marianne Promberger PhD, King's College London http://promberger.info R version 2.11.1 (2010-05-31) Ubuntu 9.04
Marianne - The function you're looking for is mapply:> mapply(function(one,two)one[two],x,y)[[1]] [1] "one" [[2]] [1] "four" "five" - Phil Spector Statistical Computing Facility Department of Statistics UC Berkeley spector at stat.berkeley.edu On Tue, 24 Aug 2010, Marianne Promberger wrote:> I have two lists of the same shape, like this: > > x <- list() > x[[1]] <- c("one","two") > x[[2]] <- c("three","four","five") > > y <- list() > y[[1]] <- c(TRUE,FALSE) > y[[2]] <- c(FALSE,TRUE,TRUE) > > I would like to index x "by" y, that is, the result in this case > should be: > > z > [[1]] > [1] "one" > > [[2]] > [1] "four" "five" > > > I was hoping > sapply(x,"[",y) > would work, but it doesn't. > > I guess I need to sapply twice, like > sapply(x, function() { sapply(y ... > but I can't figure it out. > > Many thanks for any pointers > > Marianne > > > -- > Marianne Promberger PhD, King's College London > http://promberger.info > R version 2.11.1 (2010-05-31) > Ubuntu 9.04 > > ______________________________________________ > 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. >