Hello, You're right, sorry for the misleading post. It's even documented:
"|times||A |integer vector giving the (non-negative) number of times to repeat each element if of length |length(x)|" As for a one liner, use within(). within(do.call(rbind, l), name <- rep(names(l), times=sapply(l, nrow))) Hope this helps, Rui Barradas Em 30-10-2012 10:40, Mark Payne escreveu: > Hi Rui, > > Thanks for the reply. I guess I was mainly wondering if there was a > one-line approach buried away there somewhere that I had overlooked.. > > Regarding the each argument, I initially used each as well - however, > as it turns out, times is actually the correct argument. e.g. > >> rep(letters[1:5],each=5:1) > [1] "a" "a" "a" "a" "a" "b" "b" "b" "b" "b" "c" "c" "c" "c" "c" "d" > "d" "d" "d" "d" "e" "e" "e" "e" "e" > Warning message: > In rep(letters[1:5], each = 5:1) : first element used of 'each' argument >> rep(letters[1:5],times=5:1) > [1] "a" "a" "a" "a" "a" "b" "b" "b" "b" "c" "c" "c" "d" "d" "e" > Apparently each can't be more than length 1, but if length(x) and > length(times) are the same, then it repeats each individual element > the given number of times > > Cheers, > > Mark > > On 30 October 2012 11:30, Rui Barradas <ruipbarra...@sapo.pt> wrote: >> Hello, >> >> There's nothing inelegant in your solution, you're using vectorized >> instructions. >> But there's a bug. The argument to rep should be 'each', not 'times'. >> >> l2$name <- rep(names(l), each=sapply(l,nrow)) >> >> Hope this helps, >> >> Rui Barradas >> Em 30-10-2012 08:16, Mark Payne escreveu: >>> Hi, >>> >>> I very frequently end up in a situation where I have a named list of >>> data.frames that I wish to combine. e.g. >>> >>> l <- list(A=data.frame(x=rnorm(5), >>> y=rnorm(5)), >>> B=data.frame(x=rnorm(3),y=rnorm(3)), >>> C=data.frame(x=rnorm(4),y=rnorm(4)), >>> D=data.frame(x=rnorm(7),y=rnorm(7))) >>> >>> I would like to combine these data.frames into a single data.frame, >>> with the column-names. This is easy with rbind and do.call >>> >>> l2 <- do.call(rbind,l) >>> >>> However, I would also like l2 to contain a column containing the names >>> in the original list? Is there a more elegant way to do this than: >>> >>> l2 <- do.call(rbind,l) >>> l2$name <- rep(names(l),times=sapply(l,nrow)) >>> >>> >>> Mark >>> >>> ______________________________________________ >>> 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. >> [[alternative HTML version deleted]] ______________________________________________ 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.