如何在R中将向量转换为矩阵?

79
我有一个由49个数字值组成的向量,我想要得到一个7x7的数字矩阵。请问是否有一些方便的自动转换语句可以使用,还是说我必须对正确的向量子集进行7个单独的列赋值来创建一个新的矩阵?我希望有一种类似于 c(myMatrix) 的相反操作,当然需要给出我想要拥有的行数和/或列数的选项。

11
我不理解为什么会有人给我负评。我知道这是一个初学者级别的问题,但我认为这些问题在这里是可以接受的。我在谷歌搜索了这个问题,但几乎所有结果都是人们问如何做相反的操作(将矩阵转化为向量)。请问有人能够解释一下这个问题的错误之处吗? - rumtscho
可能是因为当我谷歌搜索“在R中创建矩阵”时,几乎每个结果都指向函数matrix。(尽管Gavin的解决方案不太容易发现。) - joran
3
我并不是在谷歌搜索"create matrix",而是搜索"convert vector to matrix"和"turn vector to matrix"。一个人必须知道可以将向量作为参数创建一个新的矩阵才能想到搜索"create",这使得问题变得有点像先有鸡还是先有蛋的问题:( 不过还是谢谢你的解释。 - rumtscho
3
当我在谷歌上搜索“在R中将向量转换为矩阵”的时候,第一个结果是这个,它告诉你要使用matrix函数。 - joran
2个回答

89

只需使用matrix

matrix(vec,nrow = 7,ncol = 7)

使用matrix的一个优势是,你可以使用matrix中的byrow参数指定矩阵是按行还是按列填充,而不仅仅是像Gavin所指出的那样更改维度属性。


问题:这会在内部创建一个新对象吗? - pglpm

52

矩阵实际上就是一个带有dim属性的向量,因此您可以使用dim()函数为vec添加维度,然后vec就成为了矩阵:

vec <- 1:49
dim(vec) <- c(7, 7)  ## (rows, cols)
vec

> vec <- 1:49
> dim(vec) <- c(7, 7)  ## (rows, cols)
> vec
     [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    1    8   15   22   29   36   43
[2,]    2    9   16   23   30   37   44
[3,]    3   10   17   24   31   38   45
[4,]    4   11   18   25   32   39   46
[5,]    5   12   19   26   33   40   47
[6,]    6   13   20   27   34   41   48
[7,]    7   14   21   28   35   42   49

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接