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@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.

Reply via email to