#R语言的学习(第二章)
文章目录
- 2.第二章
- 2.1向量
- 2.1.1例题
- 2.2向量读取
- 2.2.1例题
- 2.3向量运算
- 2.3.1例子
- 2.3.2排序例子
- 2.3.3例题
- 2.4随机数
- 2.4.1均匀分布随机数
- 2.4.2正态分布
- 2.4.3二项分布
- 2.4.4随机抽样
- 2.4.5例题1
- 2.4.6例题2
- 2.5矩阵
- 2.5.1例题
- 2.5.2矩阵读取
- 2.5.2.1例子
- 2.5.3矩阵运算
- 2.5.4例题1
- 2.5.5例题2
- 2.6数组
2.第二章
2.1向量
生成一个向量,c(3,4,5,6)
,其中c()
是向量函数
读取向量的方法[]
2.1.1例题
a<-c(3,4,5,6)
a
#length() 长度
length(a)
#class() 类型
class(a)
rep(c(2,3), 3)
length(rep(c(2,3), 3))
rep(1:5,3)
rep(5:1,3)
seq(1,10)
seq(1,10,3)
length(seq(1,10,3))
seq(10,1)
seq(10,1,-3)
输出
> a<-c(3,4,5,6)
> a
[1] 3 4 5 6
> #length() 长度
> length(a)
[1] 4
> #class() 类型
> class(a)
[1] "numeric"
> rep(c(2,3), 3)
[1] 2 3 2 3 2 3
> length(rep(c(2,3), 3))
[1] 6
> rep(1:5,3)
[1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
> rep(5:1,3)
[1] 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1
> seq(1,10,3)
[1] 1 4 7 10
> length(seq(1,10,3))
[1] 4
> seq(10,1)
[1] 10 9 8 7 6 5 4 3 2 1
> seq(10,1,-3)
[1] 10 7 4 1
2.2向量读取
2.2.1例题
a[1]
a[1:3]
length(a[1:3])
y[seq(1,10,3)]
输出
> a[1]
[1] 3
> a[1:3]
[1] 3 4 5
> length(a[1:3])
[1] 3
> a[seq(1,10,3)] #此句为a[1,4,7,10]
[1] 3 6 NA NA #注:因为此时的a只有四个向量,即只能到6,后为空即NA
2.3向量运算
函数名称 | 作用 | 函数名称 | 作用 |
max() | 求最大值 | min() | 求最小值 |
sum() | 求和 | mean() | 平均值 |
median() | 中位数 | var() | 方差 |
sd() | 标准差 | sort () | 返回值排序后的数值向量 |
rank() | 向量中对应元素的“排名” | order() | 对应“排名”的元素所在向量中的位置 |
2.3.1例子
a<-c(1,2,3,4,5)
max(a)
min(a)
sum(a)
mean(a) #平均值
median(a) #中位数
var(a) #方差
sd(a) #标准差
输出
> a<-c(1,2,3,4,5)
> max(a)
[1] 5
> min(a)
[1] 1
> sum(a)
[1] 15
> mean(a) #平均值
[1] 3
> median(a) #中位数
[1] 3
> var(a) #方差
[1] 2.5
> sd(a) #标准差
[1] 1.581139
2.3.2排序例子
> a<-c(1,2,3,4,5)
> max(a)
[1] 5
> min(a)
[1] 1
> sum(a)
[1] 15
> mean(a) #平均值
[1] 3
> median(a) #中位数
[1] 3
> var(a) #方差
[1] 2.5
> sd(a) #标准差
[1] 1.581139
输出
> a<-c(4,2,3,6)
> sort(a)
[1] 2 3 4 6
> rank(a)
[1] 3 1 2 4
> order(a)
[1] 2 3 1 4
分析
原向量 | 4 | 2 | 3 | 6 |
sort()函数 | 2 | 3 | 4 | 6 |
下标 | 1 | 2 | 3 | 4 |
rank()函数是先排序再定下标,比如
排序 | 2 | 3 | 4 | 6 |
排序下标 |
|
|
|
|
原向量 | 4 | 2 | 3 | 6 |
放回原向量 | 3 | 1 | 2 | 4 |
order()函数是先给原向量定下标再排序,比如
原向量 | 4 | 2 | 3 | 6 |
下标 |
|
|
|
|
排序 | 2 | 3 | 4 | 6 |
排序下标 | 2 | 3 | 1 | 4 |
2.3.3例题
#输入一个向量,求其所有元素 的平均值
a<-c(4,3,9,6)
mean(a)
#输入一个向量,所有元素由小 到大输出
sort(a)
#输入一个向量,由大到小输出
sort(a, decreasing = T) #1
sort(a)[length(a):1] #2
#生成如下形式的向量,向量元素数为40
#1 3 5 7 1 3 5 7 1 3 5 7 ……
rep(c(1,3,5,7),10)
#1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6……
y<-rep(c(1,2,3,4,5,6),7)
y[1:40]
输出
> #输入一个向量,求其所有元素的平均值
> a<-c(4,3,9,6)
> mean(a)
[1] 5.5
> #输入一个向量,所有元素由小到大输出
> sort(a)
[1] 3 4 6 9
> #输入一个向量,由大到小输出
> sort(a, decreasing = T) #1
[1] 9 6 4 3
> sort(a)[length(a):1] #2
[1] 9 6 4 3
> #生成如下形式的向量,向量元素数为40
> #1 3 5 7 1 3 5 7 1 3 5 7 ……
> rep(c(1,3,5,7),10)
[1] 1 3 5 7 1 3 5 7 1 3 5 7 1 3 5 7 1 3 5 7 1 3 5 7 1 3 5 7 1
[30] 3 5 7 1 3 5 7 1 3 5 7
> #1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6……
> y<-rep(c(1,2,3,4,5,6),7)
> y[1:40]
[1] 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5
[30] 6 1 2 3 4 5 6 1 2 3 4
2.4随机数
2.4.1均匀分布随机数
runif(n, min = 0, max = 1) runif(10,0,1)
runif(n)0-1间的n个均匀分布随机数
默认 min = 0, max = 1
初始化随机数种子set.seed(n)
2.4.2正态分布
rnorm(n,mean=,sd=) n
=个数、mean
=均值、方差
y=rnorm(100,0,1)
2.4.3二项分布
rbinom(n,size,p)n
生成随机数个数,每数是连续size
次尝试中成功的次数,prob
是一次试验成功的概率
例子 x1=rbinom(1000,10,0.5) 抛10次硬币为一次实验,做1000次实验。
则n=1000,size=10,prob为成功的概率
2.4.4随机抽样
sample(x, n, replace=FALSE)
函数 | 意义 |
sample(x) | 随机排列x |
sample(10) | 随机排列1:10,默认不重复抽样 |
sample(10, 5) | 从1:10中随机抽5个,不重复抽样 |
sample(0:1, 100, replace=TRUE) | 100次伯努利试验,对0,1两个值,随机抽样100次,允许重复 |
2.4.5例题1
#1、以100为种子生成一个100长度的[0,1]间的随机数向量
n<-100
set.seed(n)
runif(100,0,1)
#2、以20为种子生成一个20长度的[0,100]间的随机整数向量
set.seed(20)
round(runif(20,0,100),0)
#3以18为种子从1:100中随机挑出20个数字
set.seed(18)
runif(20,1,100)
输出
> #1、以100为种子生成一个100长度的[0,1]间的随机数向量
> n<-100
Warning message:
R graphics engine version 12 is not supported by this version of RStudio. The Plots tab will be disabled until a newer version of RStudio is installed.
> set.seed(n)
> runif(100,0,1)
[1] 0.30776611 0.25767250 0.55232243 0.05638315 0.46854928
……
[96] 0.38943930 0.51745975 0.12523909 0.03014575 0.77180549
>#2、以20为种子生成一个20长度的[0,100]间的随机整数向量
>set.seed(20)
>round(runif(20,0,100),0)
[1] 88 77 28 53 96 98 9 7 33 37 72 76 0 74 19 45 32 11 29 82
> #3以18为种子从1:100中随机挑出20个数字
> set.seed(18)
> runif(20,1,100)
[1] 82.466735 71.309758 96.617642 8.782467 6.310070 57.922843
……
[19] 93.950021 7.649686
2.4.6例题2
#3以18为种子从1:100中随机挑出20个数字
set.seed(18)
runif(20,1,100)
# 生成一个100元素的[-100,100]间的随机数向量,种子为23
set.seed(23)
y<-runif(100,-100,100)
#求其平均值、最大值、最小值、和
mean(y)
mean(runif(100,-100,100))
max(runif(100,-100,100))
min(runif(100,-100,100))
#对其进行排序输出大->小,小->大
sort(runif(100,-100,100),T)
sort(runif(100,-100,100))
输出
> # 生成一个100元素的[-100,100]间的随机数向量,种子为23
> set.seed(23)
> y<-runif(100,-100,100)
> #求其平均值、最大值、最小值、和
> mean(y)
[1] 6.991202```
> mean(runif(100,-100,100))
[1] 6.70409
> max(runif(100,-100,100))
[1] 97.06359
> min(runif(100,-100,100))
[1] -98.41307
> #对其进行排序输出大->小,小->大
> sort(runif(100,-100,100),T)
> sort(runif(100,-100,100),T)
[1] 99.32224741 98.47749798 95.62608185 92.70890988
……
[97] -82.07071079 -83.44038324 -89.67305617 -96.05687307
> sort(runif(100,-100,100))
[1] -96.05687307 -89.67305617 -83.44038324 -82.07071079
……
[97] 92.70890988 95.62608185 98.47749798 99.32224741
2.5矩阵
matrix(data,row,col) row
行, col
列
2.5.1例题
y<-matrix(1:10,2,5)
y
输出
> y<-matrix(1:10,2,5)
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
diag(3) 为
单位矩阵
2.5.2矩阵读取
读取矩阵方法[]
2.5.2.1例子
y[2,3]
y[,3]
y[2,]
y[1:2,]
y[-1,]#读的时候不读第一行
y[ , -c(1,3,5)]
输出
> y[2,3]
[1] 6
> y[,3]
[1] 5 6
> y[2,]
[1] 2 4 6 8 10
> y[1:2,]
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
> y[-1,]#读的时候不读第一行
[1] 2 4 6 8 10
> y[ , -c(1,3,5)]
[,1] [,2]
[1,] 3 7
[2,] 4 8
2.5.3矩阵运算
函数 | 作用 |
t() | 转置 |
dim() | 查看变量的维数;重新设置的维数,例如dim(x)=c(3,2) |
nrow() | 行的个数 |
ncol() | 列的个数 |
x%*%Y | x与y作内积 |
x%o%y | x与y作外积 |
det() | 行列式的值 |
rbind() | 行绑定 |
cbind() | 列绑定 |
apply() | 对数组(二维或者多维)或者矩阵的某个子集进行行、列或者第三维的迭代操作,返回相关结果 |
solve(A) | 矩阵A的逆 |
solve(A,b) | 求解线性方程组Ax=b |
ev=eigen(m) | 求对称矩阵m的特征值与特征向量 |
ev$values是Sm的特征值构成的向量
ev$vectors是Sm的特征向量构成的矩阵
apply函数
用法:apply(array, margin, fun,…) margin=1,2,3,…,通过fun函数对
行(margin=1)
、列(margin=2)
或者第三维(margin=3)
进行统计apply(m, 1, sum)
将矩阵m按行求和apply(m, 2, mean)
将矩阵m的每一列求一个平均值
2.5.4例题1
#设置20为种子,生成40个随机数
set.seed(20)
x<-runif(40)
#从前到后依次分解为四个向量,元素数均为10
x[1:10]
x[11:20]
x[21:30]
x[31:40]
#将四个向量行绑定为一个4*10的矩阵
matrix(x,4,10)
#以2018为种子从1:100中随机挑出40个数字,
set.seed(2018)
y<-runif(40)
#将其转换为4行10列的矩阵
b<-matrix(y,4,10)
#输出每一行的平均值
apply(b,1,mean)
输出
> #设置20为种子,生成40个随机数
> set.seed(20)
> x<-runif(40)
> #从前到后依次分解为四个向量,元素数均为10
> x[1:10]
[1] 0.87752139 0.76853321 0.27896314 0.52916369 0.96290703
[6] 0.98035458 0.09133259 0.07074948 0.32759395 0.37007454
> x[11:20]
[1] 0.715527557 0.757796354 0.001927939 0.742802090 0.192418547
[6] 0.452099627 0.322147280 0.109071407 0.289262362 0.819456486
> x[21:30]
[1] 0.49196770 0.03025649 0.44023153 0.07728510 0.26496046
[6] 0.06959067 0.90711902 0.99227679 0.06408594 0.67510912
> x[31:40]
[1] 0.3309005 0.4478223 0.8341207 0.1859765 0.5112577 0.4749874
[7] 0.4658198 0.9099947 0.6514412 0.2578423
> #将四个向量行绑定为一个4*10的矩阵
> matrix(x,4,10)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.8775214 0.96290703 0.3275940 0.001927939 0.3221473
[2,] 0.7685332 0.98035458 0.3700745 0.742802090 0.1090714
[3,] 0.2789631 0.09133259 0.7155276 0.192418547 0.2892624
[4,] 0.5291637 0.07074948 0.7577964 0.452099627 0.8194565
[,6] [,7] [,8] [,9] [,10]
[1,] 0.49196770 0.26496046 0.06408594 0.8341207 0.4658198
[2,] 0.03025649 0.06959067 0.67510912 0.1859765 0.9099947
[3,] 0.44023153 0.90711902 0.33090054 0.5112577 0.6514412
[4,] 0.07728510 0.99227679 0.44782233 0.4749874 0.2578423
> #以2018为种子从1:100中随机挑出40个数字,
> set.seed(2018)
> y<-runif(40)
> y
[1] 0.33615347 0.46372327 0.06058539 0.19743361 0.47431419
[6] 0.30104860 0.60675886 0.13001210 0.95865471 0.54684949
[11] 0.39561597 0.66453861 0.98211229 0.67821539 0.80602781
[16] 0.63417988 0.27073646 0.55290413 0.73795568 0.82840038
[21] 0.26010079 0.56836037 0.15149827 0.09493685 0.76191660
[26] 0.53592855 0.32788094 0.92435603 0.59831174 0.06463665
[31] 0.14136788 0.86259901 0.03383022 0.49020482 0.50618012
[36] 0.76203439 0.04605593 0.05217344 0.58100593 0.17513238
> #将其转换为4行10列的矩阵
> b<-matrix(y,4,10)
> b
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.33615347 0.4743142 0.9586547 0.9821123 0.2707365 0.26010079
[2,] 0.46372327 0.3010486 0.5468495 0.6782154 0.5529041 0.56836037
[3,] 0.06058539 0.6067589 0.3956160 0.8060278 0.7379557 0.15149827
[4,] 0.19743361 0.1300121 0.6645386 0.6341799 0.8284004 0.09493685
[,7] [,8] [,9] [,10]
[1,] 0.7619166 0.59831174 0.03383022 0.04605593
[2,] 0.5359285 0.06463665 0.49020482 0.05217344
[3,] 0.3278809 0.14136788 0.50618012 0.58100593
[4,] 0.9243560 0.86259901 0.76203439 0.17513238
> #输出每一行的平均值
> apply(b,1,mean)
[1] 0.4722186 0.4254045 0.4314877 0.5273623
2.5.5例题2
#解方程:上有三十五头,下有九十四足,问雉兔各几何?
#1*x+1*y=35
#2*x 4* y 94
# 左矩阵
x<-matrix(c(1,2,1,4),2,2)
# 右矩阵
y<-matrix(c(35,94),2,1)
answer<-solve(x,y)
answer
输出
> # 左矩阵
> x<-matrix(c(1,2,1,4),2,2)
> # 右矩阵
> y<-matrix(c(35,94),2,1)
> #解
> answer<-solve(x,y)
> answer
[,1]
[1,] 23
[2,] 12
2.6数组