Re: [R] How to iteratively extract elements out of a list

From: xpRt.wannabe <xprt.wannabe_at_gmail.com>
Date: Sat 26 Aug 2006 - 14:45:50 EST

Jim and Patrick,

Both of you made the same suggestion, which works great!

A follow-up question: Suppose I change the condition 'x>2' in 'lapply' to 'x>4', as follows:

set.seed(123)
tmpf <- function() {
x <- rpois(rpois(1,4),2)
}
n <- 3
m <- replicate(n,tmpf())
m
sub.m <- lapply(m, function(x)x[x>4]) # was x>2

As a result, I'd get:

> sub.m

[[1]]
numeric(0)

[[2]]
[1] 5

[[3]]
numeric(0)

However, what would I need to do such that 'sub.m' contains only the non-zero length component; namely, the 'sub.m[[2]]'? In essence, I'd like to drop all the components of zero length such that 'sub.m' results in:

[[1]]
[1] 5

My best effort was to use 'lapply' again:

lapply(sub.m, function(x)x[length(x)>0])

which still gives me:

[[1]]
numeric(0)

[[2]]
[1] 5

[[3]]
numeric(0)

Again, any help would be greately appreciated.

p.s. Sorry to bug you again. I should have thought through a little more prior to composing an example that would represent all possible scenarios.

On 8/25/06, jim holtman <jholtman@gmail.com> wrote:
> 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@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@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?
>



R-help@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. Received on Sat Aug 26 14:52:59 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 26 Aug 2006 - 18:22:19 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.