R语言的学习(第二章)

#R语言的学习(第二章)

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

分析

原向量4236
sort()函数2346
下标1234

rank()函数是先排序再定下标,比如

排序2346
排序下标1234
原向量4236
放回原向量3124

order()函数是先给原向量定下标再排序,比如

原向量4236
下标1234
排序2346
排序下标2314
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%*%Yx与y作内积
x%o%yx与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数组

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值