[R] How to iteratively extract elements out of a list
xpRt.wannabe
xprt.wannabe at gmail.com
Sat Aug 26 07:36:32 CEST 2006
Yet another question:
Let's say I do the following:
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>2])
'sub.m' gives me:
[[1]]
[1] 3 4
[[2]]
[1] 4 5
[[3]]
[1] 4
The question is: What do I need to do such that I can extract
componets of length 2 in 'sub.m' into another sublist, which would
look like this:
[[1]]
[1] 3 4
[[2]]
[1] 4 5
I think that's all the questions I can think of -- for now.
Many, many thanks!!!
On 8/25/06, xpRt. wannabe <xprt.wannabe at gmail.com> wrote:
> 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