[R] How to iteratively extract elements out of a list
xpRt.wannabe
xprt.wannabe at gmail.com
Sat Aug 26 06:45:50 CEST 2006
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 at 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 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?
>
More information about the R-help
mailing list