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

From: Ray Brownrigg <Ray.Brownrigg_at_mcs.vuw.ac.nz>
Date: Thu, 01 May 2008 08:47:34 +1200

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



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:40:32 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 - 22:30:32 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