On Fri, Jul 23, 2010 at 11:11 AM, aegea <gche...@gmail.com> wrote: > > Thanks in advance! > > A=c(1, 2,3) > B=c (9, 10, 11, 12) > > I want to get C=c(1*9, 1*10, 1*11, 1*12, ....., 3*9, 3*10, 3*11, 3*12)? > C is still a vector with 12 elements > Is there a way to do that?
Here are yet a few more. The first one is the only one so far that uses a single function and the last two are slight variations of ones already posted. kronecker(A, B) c(tcrossprod(B, A)) c(outer(B, A)) c(B %o% A) Here is a speed comparison. The fastest are as.matrix, %outer% and %o% . They are so close that random fluctuations might easily change their order and since %o% involves the least keystrokes that one might be a good overall choice. Although not among the fastest the kronecker solution is the simplest since it only involves a single function call so it might be preferred on that count. > A <- B <- 1:400 > out <- benchmark( + as.matrix = c(as.matrix(B) %*% A), + crossprod = c(tcrossprod(B, A)), + outer = c(outer(B, A)), + o = c(B %o% A), + kronecker = kronecker(A, B), + touter = as.vector(t(outer(A, B)))) > out[order(out$relative), ] test replications elapsed relative user.self sys.self user.child sys.child 1 as.matrix 100 0.92 1.000000 0.62 0.28 NA NA 3 outer 100 0.93 1.010870 0.59 0.35 NA NA 4 o 100 0.94 1.021739 0.66 0.28 NA NA 2 crossprod 100 1.11 1.206522 0.67 0.43 NA NA 5 kronecker 100 1.45 1.576087 1.25 0.21 NA NA 6 touter 100 1.84 2.000000 1.40 0.43 NA NA ______________________________________________ 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.