Not sure it is really "matrix to vector" but here are a few of attempts:

> abM<-matrix(1:9, nrow=3)
> rownames(abM) <- letters[1:3]
> colnames(abM) <- letters[4:6]

> data.frame( cols=colnames(abM)[col(abM)[1:9]], rows= rownames(abM) [row(abM)[1:9]], vals=abM[1:9])
  cols rows vals
1    d    a    1
2    d    b    2
3    d    c    3
4    e    a    4
5    e    b    5
6    e    c    6
7    f    a    7
8    f    b    8
9    f    c    9

> matrix( c(colnames(abM)[col(abM)[1:9]], rownames(abM)[row(abM) [1:9]], abM[1:9]) ,ncol=3)
# all text values since matrices in R need to be of homogenous type
      [,1] [,2] [,3]
 [1,] "d"  "a"  "1"
 [2,] "d"  "b"  "2"
 [3,] "d"  "c"  "3"
 [4,] "e"  "a"  "4"
 [5,] "e"  "b"  "5"
 [6,] "e"  "c"  "6"
 [7,] "f"  "a"  "7"
 [8,] "f"  "b"  "8"
 [9,] "f"  "c"  "9"

But the most compact would be:

>library(reshape)
> melt(abM)
  X1 X2 value
1  a  d     1
2  b  d     2
3  c  d     3
4  a  e     4
5  b  e     5
6  c  e     6
7  a  f     7
8  b  f     8
9  c  f     9


On May 29, 2009, at 2:43 PM, 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.

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

--
David Winsemius, MD
Heritage Laboratories
West Hartford, CT

______________________________________________
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.

Reply via email to