On Fri, 2009-05-29 at 11:08 -0700, Ian Coe wrote: > Hi, > > Is there a way to convert a matrix into a vector representing all > permutations of values and column/row headings with native R functions? > I did this with 2 nested for loops and it took about 25 minutes to run > on a ~700x700 matrix. I'm assuming there must be a smarter way to do > this with R's vector commands, but being new to R, I'm having trouble > making it work.
Here is one way: > mat <- matrix(1:9, ncol = 3) > colnames(mat) <- c("a","b","c") > rownames(mat) <- c("d","e","f") > > rc <- expand.grid(rownames(mat), colnames(mat)) > res <- data.frame(Row = rc$Var2, Col = rc$Var1, + Perm = as.vector(mat)) > res Row Col Perm 1 a d 1 2 a e 2 3 a f 3 4 b d 4 5 b e 5 6 b f 6 7 c d 7 8 c e 8 9 c f 9 And timings for something similar to your 700*700 problem: > mat <- matrix(seq_len(700*700), ncol = 700) > colnames(mat) <- as.character(1:700) > rownames(mat) <- as.character(1:700) > > system.time({ + rc <- expand.grid(rownames(mat), colnames(mat)) + res <- data.frame(Row = rc$Var2, Col = rc$Var1, + Perm = as.vector(mat)) + }) user system elapsed 0.631 0.028 0.690 > head(res) Row Col Perm 1 1 1 1 2 1 2 2 3 1 3 3 4 1 4 4 5 1 5 5 6 1 6 6 HTH G > > > > Thanks, > > Ian > > > > [a] [b] [c] > > [d] 1 4 7 > > [e] 2 5 8 > > [f] 3 6 9 > > > > a d 1 > > a e 2 > > a f 3 > > b d 4 > > b e 5 > > b f 6 > > c d 7 > > c e 8 > > c f 9 > > > > > > > > > > Ian Coe > > > > Connective Capital Management, LLC > > 385 Homer Ave. > > Palo Alto, CA 94301 > > (650) 321-4826 ext. 03 > > > > CONFIDENTIALITY NOTICE: This e-mail communication (inclu...{{dropped:23}} > > ______________________________________________ > 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. -- %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~% Dr. Gavin Simpson [t] +44 (0)20 7679 0522 ECRC, UCL Geography, [f] +44 (0)20 7679 0565 Pearson Building, [e] gavin.simpsonATNOSPAMucl.ac.uk Gower Street, London [w] http://www.ucl.ac.uk/~ucfagls/ UK. WC1E 6BT. [w] http://www.freshwaters.org.uk %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
signature.asc
Description: This is a digitally signed message part
______________________________________________ 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.