矩阵(matrix)是一种特殊的向量,包含两个附加的属性:行数和列数。所以矩阵也和向量一样,有模式的概念,例如数值型和字符型。(但反过来,向量却不能看作是只有一列或一行的矩阵。)

    矩阵可通过函数matrix创建矩阵,一般使用格式为:

mymatrix = matrix( vector, nrow = rowNumber, ncol = columnNumber, byrow = logicalValue, dimnames=list( VectorRowName, VectorColumnName ) )

    其中,vector包含了矩阵的元素,nrow和ncol用以指定行和列的维数,dimnames包含了可选的、以字符型向量表示的行名和列名。选项byrow则表明矩阵应当按行填充(byrow=TRUE)还是按列填充(byrow=FALSE),默认情况下按列填充。

 

►创建矩阵

    矩阵的行和列的下标都从1开始。例如矩阵a左上角的元素记作a[1, 1]。矩阵在R中是按列存储的,也就是说先存储第一列,再存储第二列,以此类推。

    方法一:创建矩阵的方法之一就是使用matrix()函数:

> y = matrix( c(1,2,3,4), nrow=2, ncol=2)
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> y[, 2]
[1] 3 4
> y[2, ]
[1] 2 4

    这里把第一列(即1和2)与第二列(3和4)连接在一起。因此数据是(1,2,3,4)。然后我们给出行数和列数。由于R是按列存储的,这就决定了这四个数在矩阵中的位置。上例指定了矩阵中全部的4个元素,因此没必要同时设定列数ncol和行数nrow这两个参数,只需要给出其中一个就够了。4个元素排成两行,就意味着列数为2。

> matrix( c(1,2,3,4), nrow=2)
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> matrix( c(1,2,3,4), ncol=2)
     [,1] [,2]
[1,]    1    3
[2,]    2    4

 

    方法二:另外一种创建矩阵的方法是为矩阵的每一个元素赋值:

> y = matrix(nrow=2, ncol=2)
> y[1, 1] <- 1
> y[2, 1] <- 2
> y[1, 2] <- 3
> y[2, 2] <- 4
> y
     [,1] [,2]
[1,]    1    3
[2,]    2    4

    用这种方法需要事先向R声明y是一个矩阵,并且给出它的行数和列数。

    尽管R的矩阵是按列存储的,但是可以通过把matrix()的byrow参数设置为TRUE,使矩阵元素按行排列。以下是使用byrow的一个例子:

> m = matrix( c(1,2,3,4,5,6), nrow=2, byrow=T)
> m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

    尽管这样设置,但是矩阵本身依然是按列存储的,参数byrow改变的只是数据输入的顺序。当读取的数据文件是按这种方式组织时,可能会更方便。

> vector <- c( 1:4 )
> vrnames <- c( "row1", "row2" )
> vcnames <- c( "col1", "col2" )
> matrix( vector, nrow=2, byrow=TRUE, dimnames=list( vrnames, vcnames ) )
     col1 col2
row1    1    2
row2    3    4

 

►一些函数

Ю nrow( z ):返回矩阵的行数

Ю ncol( z )返回矩阵的列数

Ю dim( z ):是一个由矩阵的行数和列数组成的向量

Ю attributes( z ):返回属性值

Ю as.matrix( x ):函数将向量转化为矩阵。


►矩阵行和列的命名问题

    访问矩阵元素最直接的方法是通过行号和列号,但也可以使用行名和列名,这些名称用来访问指定的列。

> z <- matrix( 1:6, nrow=2 )
> colnames( z )
NULL
> colnames( z ) <- c( "a", "b", "c" )> z
 
> colnames( z )
[1] "a" "b" "c"
> z[ , "b" ]
[1] 3 4