[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