[R] 6 times faster by eliminating apply

Jason Liao jg_liao at yahoo.com
Tue May 1 17:32:10 CEST 2001

This is some kind of follow-up to my previous posts. I have further
improved the speed of my program 6 times by eliminating all the
apply(). It turns out that apply is slow, is slower than direct loop,
it is an order slower than a matrix operation alternative.

Here is one example. The first apply version runs 19 seconds, the
second loop version runs 13 seconds, the third matrix version runs 1

Jason Liao


test1 <- function()
   u <- runif(n*m);
   dim(u) <- c(n,m);
   v <- apply(u, 2, crossprod);
test2 <- function()
   u <- runif(n*m);
   dim(u) <- c(n,m);
   v <- numeric(m);
   for(j in 1:m) v[j] <- crossprod(u[, j]);
test3 <- function()
   u <- runif(n*m);
   dim(u) <- c(n,m);
   u <- u*u;
   one <- rep(1, n);
   v <- one %*% u;
  for(i in 1:10) test1()
   for(i in 1:10) test2()
   for(i in 1:10) test3()


Jason G. Liao
Department of Biometry and Epidemiology
Medical University of South Carolina
135 Rutledge Ave., STE 1148, Charleston, SC 29425
phone (843) 876-1114, fax (843) 876-1126


Do You Yahoo!?
Yahoo! Auctions - buy the things you want at great prices
r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-help-request at stat.math.ethz.ch

More information about the R-help mailing list