下面开始学习:
1 矩阵基本操作
1.1创建向量
R里面有多种方法来创建向量(Vector),最简单的是用函数c()。例如:
>X=c(1,2,3,4)
>X
[1] 1 2 3 4
当然,还有别的方法。例如:
>X=1:4
>X
[1] 1 2 3 4
还有seq()函数。例如:
> X=seq(1,4,length=4)
> X
[1] 1 2 3 4
注意一点,R中的向量默认为列向量,如果要得到行向量需要对其进行转置。
1.2创建矩阵
R中创建矩阵的方法也有很多。大致分为直接创建和由其它格式转换两种方法。
1.2.1直接创建矩阵
最简单的直接创建矩阵的方法是用matrix()函数,matrix()函数的使用方法如下:
> args(matrix)
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)
NULL
其中,data参数输入的为矩阵的元素,不能为空;nrow参数输入的是矩阵的行数,默认为1;ncol参数输入的是矩阵的列数,默认为1;byrow参数控制矩阵元素的排列方式,TRUE表示按行排列,FALSE表示按列排列,默认为FALSE;dimnames参数输入矩阵的行名和列名,可以不输入,系统默认为NULL。例如:
> matrix(1:6,nrow=2,ncol=3,byrow=FALSE)
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
改变矩阵的行数和列数:
> matrix(1:6,nrow=3,ncol=2,byrow=FALSE)
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
改变byrow参数:
> matrix(1:6,nrow=3,ncol=2,byrow=T)
[,1] [,2]
[1,] 1 2
[2,] 3 4
[3,] 5 6
设定矩阵的行名和列名:
> matrix(1:6,nrow=3,ncol=2,byrow=T,dimnames=list(c("A","B","C"),c("boy","girl")))
boy girl
A 1 2
B 3 4
C 5 6
1.2.2 由其它格式转换
也可以由其它格式的数据转换为矩阵,此时需要用到函数as.matrix()。
1.3 查看和改变矩阵的维数
矩阵有两个维数,即行维数和列维数。在R中查看矩阵的行维数和列维数可以用函数dim()。例如:
> X=matrix(1:12,ncol=3,nrow=4)
> X
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> dim(X)
[1] 4 3
只返回行维数:
> dim(X)[1]
[1] 4
也可以用函数nrow()
> nrow(X)
[1] 4
只返回列维数:
> dim(X)[2]
[1] 3
也可以用函数ncol():
> ncol(X)
[1] 3
同时,函数dim()也可以改变矩阵的维数。例如:
> dim(X)=c(2,6)
> X
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 3 5 7 9 11
[2,] 2 4 6 8 10 12
1.4矩阵行列的名称
查看矩阵的行名和列名分别用函数rownames()和函数colnames()。例如:
> X=matrix(1:6,nrow=3,ncol=2,byrow=T,dimnames=list(c("A","B","C"),c("boy","girl")))
> X
boy girl
A 1 2
B 3 4
C 5 6
查看矩阵的行名:
> rownames(X)
[1] "A" "B" "C"
查看矩阵的列名:
> colnames(X)
[1] "boy" "girl"
同时也可以改变矩阵的行名和列名,比如:
> rownames(X)=c("E","F","G")
> X
boy girl
E 1 2
F 3 4
G 5 6
> colnames(X)=c("man","woman")
> X
man woman
E 1 2
F 3 4
G 5 6
1.5 矩阵元素的查看及其重新赋值
查看矩阵的某个特定元素,只需要知道该元素的行坐标和列坐标即可,例如:
> X=matrix(1:12,nrow=4,ncol=3)
> X
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
查看位于矩阵第二行、第三列的元素:
> X[2,3]
[1] 10
也可以重新对矩阵的元素进行赋值,将矩阵第二行、第三列的元素替换为0:
> X[2,3]=0
> X
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 0
[3,] 3 7 11
[4,] 4 8 12
R中有一个diag()函数可以返回矩阵的全部对角元素:
> X=matrix(1:9,ncol=3,nrow=3)
> X
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> diag(X)
[1] 1 5 9
当然也可以对对角元素进行重新赋值:
> diag(X)=c(0,0,1)
> X
[,1] [,2] [,3]
[1,] 0 4 7
[2,] 2 0 8
[3,] 3 6 1
当操作对象不是对称矩阵时,diag()也可以进行操作。
> X=matrix(1:12,nrow=4,ncol=3)
> X
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> diag(X)
[1] 1 6 11
diag()函数还能用来生成对角矩阵:
> diag(c(1,2,3))
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 2 0
[3,] 0 0 3
也可以生成单位对角矩阵:
> diag(3)
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 1 0
[3,] 0 0 1
> diag(4)
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 0 0 1 0
[4,] 0 0 0 1
查看矩阵的上三角部分:在R中查看矩阵的上三角和下三角部分很简单。可以通过lower.tri()和upper.tir()来实现:
> args(lower.tri)
function (x, diag = FALSE)
NULL
> args(upper.tri)
function (x, diag = FALSE)
NULL
查看上三角:
> X=matrix(1:12,nrow=4,ncol=3)
> X
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> X[lower.tri(X)]
[1] 2 3 4 7 8 12
改变赋值:
> X[lower.tri(X)]=0
> X
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 0 6 10
[3,] 0 0 11
[4,] 0 0 0