Here are some timings. From fastest to slowest we have: #3, #4, #1, #2 so, yes, the apply approach, even with the improvement (#2), is the slowest and, in fact, on this test is an order of magnitude slower than #3 which is the fastest one.
> m <- matrix(1:40000, 200) # test matrix > > # 1 - m must be numeric for this one to work > system.time(for(i in 1:100)kronecker(m, rep(1,2))) [1] 2.93 0.29 3.34 NA NA > > # 2 > system.time(for(i in 1:100)apply(m, 2, rep, each = 2)) [1] 5.22 0.09 5.73 NA NA > > # 3 - from Alex's post > system.time(for(i in 1:100)m[rep(1:nrow(m), each = 2),]) [1] 0.50 0.07 0.60 NA NA > > # 4 > system.time(for(i in 1:100)matrix(rbind(c(m), c(m)), nc = ncol(m))) [1] 1.54 0.20 1.77 NA NA On 10/1/06, Tong Wang <[EMAIL PROTECTED]> wrote: > Hi, > Thanks you guys for all the help. I learned a lot from it. > It looks using apply() is not an efficient way, since all it does is > looping through > each row(or col) , which would be slow for large matrix, right ? > > cheers > > ----- Original Message ----- > From: Gabor Grothendieck <[EMAIL PROTECTED]> > Date: Saturday, September 30, 2006 4:54 am > Subject: Re: [R] How to repeat vectors ? > To: Tong Wang <[EMAIL PROTECTED]> > Cc: r-help@stat.math.ethz.ch > > > Here are 4 approaches in order from most compact > > to least. #1 only works for numeric matrices, # 2 is > > a shorter versio of your solution using rep.vec and # 3 > > is from Alex's post and is likely what I would > > use in practice. > > > > m <- matrix(1:4, 2) # test matrix > > > > # 1 - m must be numeric for this one to work > > kronecker(m, rep(1,2)) > > > > # 2 > > apply(m, 2, rep, each = 2) # 2 > > > > # 3 - from Alex's post > > m[rep(1:nrow(m), each = 2),] > > > > # 4 > > matrix(rbind(c(m), c(m)), nc = ncol(m)) > > > > On 9/30/06, Tong Wang <[EMAIL PROTECTED]> wrote: > > > I just figured out a way to do this: > > > rep.vec <- function(X,n) > > return(t(array(rep(X,n),c(length(X),n))))> > > > Then, apply(MyMatrix, 2, rep.vec,2) > > > > > > Is there a better way ? Is there an internal function to repeat > > a vector or matrix ? > > > > > > Thanks a lot. > > > > > > > > > ----- Original Message ----- > > > From: Tong Wang <[EMAIL PROTECTED]> > > > Date: Friday, September 29, 2006 11:23 pm > > > Subject: How to repeat vectors ? > > > To: r-help@stat.math.ethz.ch > > > > > > > Hi, > > > > If I have a matrix , say a11 a12 > > > > a21 a22 > > > > Is there a routine to get: a11 a12 > > > > a11 a12 > > > > a21 a22 > > > > a21 a22 > > > > > > > > Thanks a lot for any help. > > > > > > > > best > > > > > > > > > > ______________________________________________ > > > 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. > > > > > > ______________________________________________ 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.