On Nov 16, 2007, at 6:42 PM, Andrew Park wrote: > Hi there, > > I would like to find a more efficient way of permuting the rows and > columns of a symmetrical matrix that represents ecological or > actual distances between objects in space. The permutation is of > the type used in a Mantel test. > > Specifically, the permutation has to accomplish something like this: > > > Original matrix addresses: > > a11 a12 a13 > > a21 a22 a23 > > a31 a32 a33 > > > Example permutation > > a22 a23 a21 > > a32 a33 a31 > > a12 a13 a11 > > that is relative positions of rows and columns are conserved in the > permutation. > > The problem is, R-users will know, is that using "for" loops like > this is slow, and gets slower the further into the loop you get. > > However, I am not a sophisticated programmer, and cannot think of a > more efficient way to do this.
Would this work do what you want? (Main point: You can index a vector by an array): n <- 3 x <- apply(expand.grid(1:n,1:n),1,paste,collapse="") x <- paste("a",x,sep="") dim(x) <- c(n,n) prm <- sample(1:n) h<-apply(expand.grid(prm,prm),1,function(x) x[1]+n*x[2]-n) matrix(x[h],c(n,n)) > Thanks in advance, > > Andy Park (University of Winnipeg). > Haris Skiadas Department of Mathematics and Computer Science Hanover College ______________________________________________ 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.