Ah, so the code is quite similar in MATLAB (and the *algorithm* is the same :-) ).
The "Important programming tip" is that when converting from MATLAB to R, you shouldn't just 'translate' from MATLAB code to R code, you must reconsider the problem in the context of the R environment. This is very much like translating poetry, where the result should really be a poem in the target language, not just an accurate word-for-word (or even sentence-for-sentence) translation. Ray On Thu, 01 May 2008, you wrote: > This is the missing Matlab code: > > function[fc_matrix]=grw_permute(fc_vector) > > > > n=length(fc_vector); > > > > fc_matrix=zeros(2,n^2); > > > > index=1; > > for i=1:n > > for j=1:n > > fc_matrix(index)=fc_vector(i); > > fc_matrix(index+1)=fc_vector(j); > > index=index+2; > > end > > end > > > > > > > On Wed, Apr 30, 2008 at 4:47 PM, Ray Brownrigg > <[EMAIL PROTECTED]> > > wrote: > > 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@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.