Re: [R] Why R is 200 times slower than Matlab ?

From: Erik Iverson <iverson_at_biostat.wisc.edu>
Date: Wed, 30 Apr 2008 15:56:37 -0500

Zhandong Liu wrote:
> I am switching from Matlab to R, but I found that R is 200 times slower than
> matlab.
>
> Since I am newbie to R, I must be missing some important programming tips.

The most important tip I would give you is to use the vectorized nature of R whenever possible. This helps avoid messy indexing and 'for' loops.

Look at the following 3 functions. Yours, Gabor's, and my own (which I was about to post when I saw Gabor's nice solution, and is basically the same).

Also see the system timings after the definitions.

grw_permute <- function(input_fc){

   fc_vector <- input_fc
   index <- 1
   k <- length(fc_vector)
   fc_matrix <- matrix(0, 2, k^2)

   for(i in 1:k){

     for(j in 1:k){
       fc_matrix[index]  <-  fc_vector[i]
       fc_matrix[index+1]  <-  fc_vector[j]
       index <- index + 2
     }

   }
   return(fc_matrix)
}

grw.permute2 <- function(v) {

   cbind( rep(v, each=length(v)), rep(v, length(v)) ) }

grw_permute3 <- function(input_fc) {

   matrix(c(rep(input_fc, each = length(input_fc)),

            rep.int(input_fc, times = length(input_fc))),
          nrow = 2, byrow = TRUE)

}

 > system.time(p1 <- grw_permute(1:300))

    user system elapsed
   1.548 0.064 2.341
 > system.time(p2 <- grw_permute2(1:300))

    user system elapsed
   0.009 0.001 0.010
 > system.time(p3 <- grw_permute3(1:300))

    user system elapsed
   0.008 0.002 0.010

Erik Iverson



R-help_at_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. Received on Wed 30 Apr 2008 - 21:10:38 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Wed 30 Apr 2008 - 21:30:42 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive