接上一章数据读取和简单运算,本章的重点知识是学习向量和矩阵的计算。
目录
R语言构建矩阵
在R语言中,我们知道函数的描述方法为c()
用函数赋值的通用方法为x=c(1,2,3)
用length()函数计算x的长度。
用mode()函数获取x的类型。
R语言rbind()和cbind()构建矩阵
rbind()函数构建矩阵,通过采用行的方式把x1和x2进行叠加,x1行的矩阵与x2行的矩阵rbind()最后变成x1+x2行,注意,当使用rbind()方法进行合并的时候,x1和x2的行数必须一致。
cbind()函数构建矩阵,通过采用列的方式把x1和x2进行叠加,x1行的矩阵与x2行的矩阵rbind()最后变成x1+x2列,注意,当使用cbind()方法进行合并的时候,x1和x2的行数必须一致。
示例图如下:
> x1=c(1,2,3,4,5)
> x2=c(2,4,6,8,10)
> length(x1)
[1] 5
> mode(x2)
[1] "numeric"
> x1
[1] 1 2 3 4 5
> x1[3] #获取x1中的第3位数字
[1] 3
> a1=c(1:12) #创建1-12之间的向量序列
> a1
[1] 1 2 3 4 5 6 7 8 9 10 11 12
> rbind(x1,x2) #以行的形式构建矩阵
[,1] [,2] [,3] [,4] [,5]
x1 1 2 3 4 5
x2 2 4 6 8 10
> cbind(x1,x2) #以列的形式构建矩阵
x1 x2
[1,] 1 2
[2,] 2 4
[3,] 3 6
[4,] 4 8
[5,] 5 10
> m1=rbind(x1,x2)
> m1
[,1] [,2] [,3] [,4] [,5]
x1 1 2 3 4 5
x2 2 4 6 8 10
>
R语言函数matrix()构建矩阵
> a1=(1:15)
> matrix(a1,nrow=3,ncol=5)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15matrix(a1,nrow=5,ncol=3)
[,1] [,2] [,3]
[1,] 1 6 11
[2,] 2 7 12
[3,] 3 8 13
[4,] 4 9 14
[5,] 5 10 15matrix(a1,nrow=5,ncol=3,byrow=T) #按照行的形式进行排序,第一种方法
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
[5,] 13 14 15
> a=matrix(1:12,nrow=3,ncol=4) #用1-12之间的数字构建一个3行4列的矩阵
> a
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> t(a) #按照行的形式进行排序,第二种方法
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
R语言矩阵的计算方式
R语言矩阵的加减乘除运算
> a=b=matrix(1:16,nrow=2,ncol=8)
> a
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 3 5 7 9 11 13 15
[2,] 2 4 6 8 10 12 14 16
> b
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 3 5 7 9 11 13 15
[2,] 2 4 6 8 10 12 14 16
> a+b
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 2 6 10 14 18 22 26 30
[2,] 4 8 12 16 20 24 28 32
>
> a-b
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0
> a*b
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 9 25 49 81 121 169 225
[2,] 4 16 36 64 100 144 196 256
> a/b
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 1 1 1 1 1
[2,] 1 1 1 1 1 1 1 1
> diag(a) diag函数功能:矩阵对角元素的提取
[1] 1 4> diag(diag(a))
[,1] [,2]
[1,] 1 0
[2,] 0 4
diag(1) #diag函数功能:创建对角阵
[,1]
[1,] 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
> a=matrix(1:12,nrow=3,ncol=4)
> b=matrix(1:12,nrow=4,ncol=3)
> a%*%b
[,1] [,2] [,3]
[1,] 70 158 246
[2,] 80 184 288
[3,] 90 210 330
矩阵求逆solve()
> a=matrix(rnorm(16),4,4)#rnorm()函数产生一系列的随机数,随机数个数,均值和标准差都可以设定。
> a
[,1] [,2] [,3] [,4]
[1,] -0.6963409 0.9499080 -1.4986043 -0.61843048
[2,] -2.2406160 0.6845934 -1.3226247 -0.45994849
[3,] 0.8012584 0.2165742 -0.6033209 -0.04697445
[4,] -1.0929658 -0.4087256 0.6034307 1.43884971> solve(a) #求矩阵a的逆
[,1] [,2] [,3] [,4]
[1,] 0.1694759 -0.3617751 0.3404369 -0.0316899
[2,] 4.2985928 -2.9471013 -3.4227370 0.7937485
[3,] 1.7191846 -1.5008158 -2.4587446 0.1788929
[4,] 0.6288130 -0.4825557 0.3174812 0.8213783