Dear List, The following code produces a list, which is what I what: set.seed(123) tmpf <- function() { x <- rpois(rpois(1,4),2) } n <- 3 m <- replicate(n,tmpf()) m [[1]] [1] 3 2 4 [[2]] [1] 0 2 4 2 2 5 2 [[3]] [1] 2 0 4 1 0 Now I need something that would to extract iteratively (or as many times as the size of 'n') the values that are greater than 2 in each component of 'm' into another list such that the sub-list would be: [[1]] [1] 3 4 [[2]] [1] 4 5 [[3]] [1] 4 Below is what I tried: for(i in 1:3) sub.list <- lapply(m,subset,m[[i]]>2)> sub.listwhich gives me something different from what I want: [[1]] [1] 4 [[2]] [1] 4 [[3]] [1] 4 Any help would be appreciated.> version_ platform i386-pc-mingw32 arch i386 os mingw32 system i386, mingw32 status major 2 minor 2.1 year 2005 month 12 day 20 svn rev 36812 language R
try this:> set.seed(123) > tmpf <- function() {+ x <- rpois(rpois(1,4),2) + }> n <- 3 > m <- replicate(n,tmpf()) > m[[1]] [1] 3 2 4 [[2]] [1] 0 2 4 2 2 5 2 [[3]] [1] 2 0 4 1 0> lapply(m, function(x)x[x>2])[[1]] [1] 3 4 [[2]] [1] 4 5 [[3]] [1] 4>On 8/25/06, xpRt.wannabe <xprt.wannabe at gmail.com> wrote:> Dear List, > > The following code produces a list, which is what I what: > > set.seed(123) > tmpf <- function() { > x <- rpois(rpois(1,4),2) > } > n <- 3 > m <- replicate(n,tmpf()) > m > > [[1]] > [1] 3 2 4 > > [[2]] > [1] 0 2 4 2 2 5 2 > > [[3]] > [1] 2 0 4 1 0 > > > Now I need something that would to extract iteratively (or as many > times as > the size of 'n') the values that are greater than 2 in each component > of > 'm' into another list such that the sub-list would be: > > [[1]] > [1] 3 4 > > [[2]] > [1] 4 5 > > [[3]] > [1] 4 > > Below is what I tried: > > for(i in 1:3) > sub.list <- lapply(m,subset,m[[i]]>2) > > > sub.list > > which gives me something different from what I want: > > [[1]] > [1] 4 > > [[2]] > [1] 4 > > [[3]] > [1] 4 > > Any help would be appreciated. > > > version > _ > platform i386-pc-mingw32 > arch i386 > os mingw32 > system i386, mingw32 > status > major 2 > minor 2.1 > year 2005 > month 12 > day 20 > svn rev 36812 > language R > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?
lapply(m,function(x)x[x>2]) [[1]] [1] 3 4 [[2]] [1] 4 5 [[3]] [1] 4
Gabor Grothendieck
2006-Aug-27 00:23 UTC
[R] How to iteratively extract elements out of a list
On 8/26/06, Patrick Connolly <p_connolly at ihug.co.nz> wrote:> On Sat, 26-Aug-2006 at 09:57AM +0100, Patrick Burns wrote: > > |> > sub.m <- lapply(m, function(x)x[x>2]) > |> > sub.m > |> [[1]] > |> [1] 3 4 > |> > |> [[2]] > |> [1] 4 5 > |> > |> [[3]] > |> [1] 4 > |> > |> > sub.m[unlist(lapply(sub.m, function(x) length(x) == 2))] > |> [[1]] > |> [1] 3 4 > |> > |> [[2]] > |> [1] 4 5 > |> > |> > sub4.m <- lapply(m, function(x)x[x>4]) > |> > sub4.m[unlist(lapply(sub4.m, function(x) length(x) > 0))] > |> [[1]] > |> [1] 5 > > Or slightly shorter in this case: > > sub.m[sapply(sub.m, function(x) length(x) == 2)] >or even shorter: sub.m[sapply(sub.m, length) == 2]
Hi try to do it without loop lapply(m,function(x) x[x>2]) HTH Petr On 25 Aug 2006 at 13:52, xpRt.wannabe wrote: Date sent: Fri, 25 Aug 2006 13:52:51 -0500 From: "xpRt.wannabe" <xprt.wannabe at gmail.com> To: r-help at stat.math.ethz.ch Subject: [R] How to iteratively extract elements out of a list> Dear List, > > The following code produces a list, which is what I what: > > set.seed(123) > tmpf <- function() { > x <- rpois(rpois(1,4),2) > } > n <- 3 > m <- replicate(n,tmpf()) > m > > [[1]] > [1] 3 2 4 > > [[2]] > [1] 0 2 4 2 2 5 2 > > [[3]] > [1] 2 0 4 1 0 > > > Now I need something that would to extract iteratively (or as many > times as the size of 'n') the values that are greater than 2 in each > component of 'm' into another list such that the sub-list would be: > > [[1]] > [1] 3 4 > > [[2]] > [1] 4 5 > > [[3]] > [1] 4 > > Below is what I tried: > > for(i in 1:3) > sub.list <- lapply(m,subset,m[[i]]>2) > > > sub.list > > which gives me something different from what I want: > > [[1]] > [1] 4 > > [[2]] > [1] 4 > > [[3]] > [1] 4 > > Any help would be appreciated. > > > version > _ > platform i386-pc-mingw32 > arch i386 > os mingw32 > system i386, mingw32 > status > major 2 > minor 2.1 > year 2005 > month 12 > day 20 > svn rev 36812 > language R > > ______________________________________________ > R-help at stat.math.ethz.ch 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.Petr Pikal petr.pikal at precheza.cz