在笔记一中已经提到了向量,这篇文章主要介绍R语言中的四中常用的结构:
向量:*传送门*
数组
矩阵
数据框
然后在介绍如何利用矩阵求解二维线性方程组。
****************************************************************************************************************************************
一:数组(*数组可以理解是一个向量按照给定的维度进行拆分)
★数组即是二维向量,矩阵是一种特殊的二维数组
★将一个向量转化为一个二位数组(添加指定维度即可)
> x = c(1,2,3,4,5,6);dim(x)<-c(2,3) #两行三列
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
二:矩阵(矩阵matrix)
★将两个向量合成矩阵(按照行合并rbind()+按照列c合并cbind())
> x1 = c(1,2,3,4,5)
> x2 = c(6,7,8,9,0)
> rbind(x1,x2) #行式合并
[,1] [,2] [,3] [,4] [,5]
x1 1 2 3 4 5
x2 6 7 8 9 0
> cbind(x1,x2) #column列式合并
x1 x2
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 0
★将一个向量生成矩阵(matrix(x,nrow=?,ncol=?,byrow=T/F))
> a = c(1:12)
> matrix(a,ncol=3,nrow=4,byrow=F) #column列 row行
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
# 默认是按照列来存储
# 使用byrow=T即可按照行来排列
★对矩阵的操作(转置t()、加减+/-、相乘%*%)
*注意矩阵的相乘!
> a = c(1:12)
> matrix(a,ncol=3,nrow=4)
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
> a = matrix(a,ncol=3,nrow=4)
> t(a) #矩阵的转置
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
> t(a)+t(a) #矩阵的相加
[,1] [,2] [,3] [,4]
[1,] 2 4 6 8
[2,] 10 12 14 16
[3,] 18 20 22 24
> t(a)-t(a) #矩阵的相减
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
#############################
> a*a #矩阵相乘不是这样求的!!!
[,1] [,2] [,3]
[1,] 1 25 81
[2,] 4 36 100
[3,] 9 49 121
[4,] 16 64 144
> a%*%a #矩阵相乘正确表示法-1
Error in a %*% a : 非整合参数
> a%*%t(a) #矩阵相乘正确表示法-2
[,1] [,2] [,3] [,4]
[1,] 107 122 137 152
[2,] 122 140 158 176
[3,] 137 158 179 200
[4,] 152 176 200 224
★对矩阵的求逆solve()
> a = matrix(rnorm(16),4,4) #产生16个标准正态函数随机数形成矩阵
> a
[,1] [,2] [,3] [,4]
[1,] -0.7916955 -0.12091979 0.8894439 -0.9282618
[2,] -1.0293705 -0.03193216 1.2088014 -0.8579586
[3,] 0.5910502 -0.13763924 -2.0954597 1.2839705
[4,] -1.2613026 1.68569169 1.1454875 0.7667483
> solve(a) #矩阵求逆
[,1] [,2] [,3] [,4]
[1,] 0.1013944 -1.414402 -0.8201621 -0.08648724
[2,] 4.4811933 -4.612241 -0.3206119 0.80112951
[3,] -3.2370056 2.449358 -0.5650455 -0.23193872
[4,] -4.8491425 4.154059 0.1998474 -0.25283530
三:数据框 data.frame()
数据框其实跟矩阵差不多,都是二维表单,但是矩阵中每一个数据都是数值型的,
而数据框中每一列的类型可以是不同的
用法:
x1 = c(1,2,3,4,5,6,7)
x2 = c(5,8,9,5,4,7,6)
x = data.frame(x1,x2)
x = data.frame('重量'=x1,'运费'=x2)
###################################
> x1 = c("aaa","bbb","ty","ju","hh","df","wq") #这里双引号可以,单引号也可以
> x2 = c(1:7)
> cbind(x1,x2) #列合成矩阵--->>>注意下面输出数据中的引号
x1 x2
[1,] "aaa" "1"
[2,] "bbb" "2"
[3,] "ty" "3"
[4,] "ju" "4"
[5,] "hh" "5"
[6,] "df" "6"
[7,] "wq" "7"
> data.frame('重量'=x1,'运费'=x2) #数据框
重量 运费
1 aaa 1
2 bbb 2
3 ty 3
4 ju 4
5 hh 5
6 df 6
7 wq 7
四:利用矩阵求解二维线性方程组(使用solve(a,b)函数)
*solve()在上面也用于矩阵的求逆
★现在要求解一个四元线性方程组,可以使用4*4型矩阵进行该四个方程的存储:
> a = matrix(rnorm(16),4,4) #产生16个标准正态函数随机数形成矩阵
> a
[,1] [,2] [,3] [,4]
[1,] -0.7916955 -0.12091979 0.8894439 -0.9282618
[2,] -1.0293705 -0.03193216 1.2088014 -0.8579586
[3,] 0.5910502 -0.13763924 -2.0954597 1.2839705
[4,] -1.2613026 1.68569169 1.1454875 0.7667483
b = 1,2,3,4
> solve(a,b)
[1] -5.5338453 -2.5006061 -0.9611801 3.0471763
★这里solve()函数的参数的含义:
*以第一行为例:(-0.7916955*x1) + (-0.12091979*x2) + (0.8894439*x3) + (-0.9282618*x4) = 1
*最后显示的结果是x1,x2,x3,x4的值。
****************************************************************************************************************************************
最快的脚步不是跨越,而是继续,最慢的步伐不是小步,而是徘徊。
****************************************************************************************************************************************