On 09/13/2010 08:41 PM, Sunny Srivastava wrote:
> Dear R-Helpers,
> I have a list l1 like:
> 
> l1[[1]]
> a b c
> 
> l1[[2]]
> d
> 
> l1[[3]]
> e f
> 
> I want an output res like:
> 
> res[[1]]
> 1 1 1
> 
> res[[2]]
> 2
> 
> res[[3]]
> 3 3
> 
> Essentially, I want to replicate each index equal to the number of elements
> present in that index.
> 
> Below is what I do to accomplish this:
> 
> l1 <- list(c("a", "b", "c"), "d", c("e", "f"))
> res <- mapply(rep, seq_along(l1),times=(lapply(l1, length)))
> 
> Is there a more elegant way of doing this (possibly using one (l/m)apply
> function)?

Don't know about elegance, but how about

lapply(seq_along(l1), function(i)rep(i, length(l1[[j]])) )

-- 
Peter Dalgaard
Center for Statistics, Copenhagen Business School
Phone: (+45)38153501
Email: pd....@cbs.dk  Priv: pda...@gmail.com

______________________________________________
R-help@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.

Reply via email to