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

Ray Brownrigg Ray.Brownrigg at mcs.vuw.ac.nz
Wed Apr 30 22:47:34 CEST 2008


On Thu, 01 May 2008, 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.
>
> Please help me out on this.
>
> Here is the function:
> ## make the full pair-wise permutation of a vector
> ## input_fc=c(1,2,3);
> ## output_fc=(
> 1 1 1 2 2 2 3 3 3
> 1 2 3 1 2 3 1 2 3
> );
>
> 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)
>
> }
>
> For an input vector of size 300. It took R 2.17 seconds to run.
>
> But the same code in matlab only needs 0.01 seconds to run.

I am not a MATLAB user, but I suspect it wasn't "the same code" that produced 
an answer in MATLAB, but you don't provide your MATLAB code, nor do you 
specify what version of R, of MATLAB, or what hardware and OS you are using.

I get {NetBSD, R version 2.6.0 (2007-10-03), Core 2 Duo, 3.x GHz}:
> input_fc <- sample(1:600)
> unix.time(a1 <- grw_permute(input_fc))
   user  system elapsed
  3.279  -0.001   3.280
> unix.time({n <- length(input_fc); a2 <- matrix(c(rep(input_fc, each=n), 
rep(input_fc, n)), 2, n*n, byrow = T)})
   user  system elapsed
  0.019   0.020   0.040
> all.equal(a1, a2)
[1] TRUE
>               
A sample of length 300 took less than 1 second using your grw_permute() (so 
your OS may be making a difference as well).
>
> Am I missing sth in R.. Is there a away to optimize.  ???
>
Yes. Loops are not efficient in R.

> Thanks

HTH,
Ray Brownrigg



More information about the R-help mailing list