好久没有更新我的csdn,好学的叶叶又回来了!欢迎大家关注我的博客,和我一起进步呀呀呀呀!!!
文章目录
1、向量
1.1 生成向量
1.1.1 常规法
用函数x=c( , , ,… )
生成公差为1的等差向量:x=c(1:10)
生成的向量每一个元素减1:1:10-1
生成的向量每一个元素乘2:1:10*2
生成的向量每一个元素先乘2再加1:1:10*2+1
显示向量的第n个元素:x[n]
显示除过第n个元素以外后的向量:x[-n]
提取向量x中的第一个元素到第五个元素向量:x[1:5]
显示提取过后的向量:x[-(1:5)]
提取非规律性的元素,例如提取x中第2,4,7个元素:x[c(2,4,7)]
将向量中小于5且大于2的元素提取出来:x[x<5 & x>2]
> x=c(1,2,3,4,5)
> mode(x)
[1] "numeric"
> length(x)
[1] 5
> 1:10-1
[1] 0 1 2 3 4 5 6 7 8 9
> 1:10*2
[1] 2 4 6 8 10 12 14 16 18 20
> 1:10*2+1
[1] 3 5 7 9 11 13 15 17 19 21
> x[c(1:10-1)]
[1] 1 2 3 4 5 6 7 8 9
> x=c(1:10)
> x(2)
Error in x(2) : 没有"x"这个函数
> x[2]
[1] 2
> x[-2]
[1] 1 3 4 5 6 7 8 9 10
> x[1:5]
[1] 1 2 3 4 5
> x[-(1:5)]
[1] 6 7 8 9 10
> x[c(2,4,7)]
[1] 2 4 7
> x[x<5 & x>2]
[1] 3 4
- mode(x)用于查看数据类型;
- length(x)用于查看数据数量。
1.1.2 seq函数
也可用 seq()函数按照指定的规律生成向量
seq(m,n,by=p)生成步长为p的从m到n的向量
> seq(5,20)
[1] 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
> seq(5,121,by=2)
[1] 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39
[19] 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75
[37] 77 79 81 83 85 87 89 91 93 95 97 99 101 103 105 107 109 111
[55] 113 115 117 119 121
> seq(5,121,by=2,length=10)
Error in seq.default(5, 121, by = 2, length = 10) : 太多参数
> seq(5,121,length=10)
[1] 5.00000 17.88889 30.77778 43.66667 56.55556 69.44444 82.33333
[8] 95.22222 108.11111 121.00000
1.1.3 字母序列的生成
产生字母序列:letters[m:n]
> letters[1:20]
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r"
[19] "s" "t"
> letters[1:20:2]
[1] "a" "b"
Warning message:
In 1:20:2 : numerical expression has 20 elements: only the first used
至于如何生成固定步长的字母序列我暂时还没有学习,有待补充
1.1.4 which函数
- 首先我们生成一个a向量
> a=c(2,3,4,5,6,1,2,3,7,4,6,7,8,9,9)
- which.max(a)得出向量a中的最大值,但注意,与max函数不同的是,此函数返回的是最大值所在的下标。若最大值有几个,则返回的最大值下标为最小的那个
> a=c(2,3,4,5,6,1,2,3,7,4,6,7,8,9,9)
> which.max(a)
[1] 14
- which.min(a)同理,不予赘述
- 若要知道最大值是多少,也可用a[which.max(a)]
> a[which.max(a)]
[1] 9
- 计算向量哪个元素等于2,用函数which(a==2),注意,此函数返回的也是元素下标,即第几个元素。
> which(a==2)
[1] 1 7
- 同理,若要知道其值,用函数a[which(a==2)]
> a[which(a==2)]
[1] 2 2
- 计算向量a中哪些元素大于5,用函数which(a>5),返回的也是元素下标。
> which(a>5)
[1] 5 9 11 12 13 14 15
- 若要知道具体是哪些值,则用函数a[which(a>5)]
> a[which(a>5)]
[1] 6 7 6 7 8 9 9
综上所述,可观察到,直接用which函数得出的总是向量的下标。
1.1.5 rev函数、sort函数
- 首先,生成一个1:20的向量
> a=c(1:20)
- rev函数用于颠倒向量,即以倒序排列。
> rev(a)
[1] 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- sort函数用于排序,将一个杂乱无序的向量按照从小到大的顺序排列。
> a=c(5,4,8,34,5,7,1,2,34,90,44,67,4,9,23,65,7,8,9)
> sort(a)
[1] 1 2 4 4 5 5 7 7 8 8 9 9 23 34 34 44 65 67 90
- 当然,若想按照从大到小的顺序进行排列,只需再rev一下即可。
> rev(sort(a))
[1] 90 67 65 44 34 34 23 9 9 8 8 7 7 5 5 4 4 2 1
1.1.6 随机向量
按照正态分布生成n个随机数组成向量:rnorm(n)
> a=rnorm(16)
> a
[1] -0.05385883 0.64121259 0.18459447 -0.63004138 -0.24024422 1.09277631
[7] 2.69672975 0.51770875 -0.06545141 -1.57780169 0.03358371 -1.20524500
[13] 0.60810837 -1.58089476 2.17286693 0.49140841
1.2 合并向量
按行(row)合并:rbinb(x1,x2)
按列(column)合并:cbind(x1,x2)
> x1=c(1,2,3,4)
> x2=c(5,6,7,8)
> rbind(x1,x2)
[,1] [,2] [,3] [,4]
x1 1 2 3 4
x2 5 6 7 8
> cbind(x1,x2)
x1 x2
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
2、矩阵
2.1 生成矩阵
matrix()
- 首先,生成一个向量a
> a=c(1:12)
- 用上述一维向量生成一个3行4列矩阵。若没有特殊指定,一般按列来排。
> matrix(a,nrow=3,ncol=4)
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
- 若要按照行来排的话,需在matrix函数后加byrow=T命令。其中T表示真,不能小写,R语言大小写要区分的!!
> matrix(a,nrow=3,ncol=4,byrow=T)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
- 生成n阶单位矩阵:diag(n)
> 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
- 按照正态分布生成n个随机数组成随机矩阵
> a=matrix(rnorm(16),nrow=4,ncol=4)
> a
[,1] [,2] [,3] [,4]
[1,] 0.69634361 -0.76164497 1.1443136 0.1077397
[2,] -0.04774814 -0.08559135 1.0688682 -0.4232958
[3,] 0.91869660 -0.71873342 1.0451459 -0.1858793
[4,] 1.18105361 -1.09516245 -0.9547362 0.1628779
2.2 矩阵运算
- 首先,生成一个矩阵。
> a=matrix(1:12,nrow=3,ncol=4)
- 矩阵转置:t(a) 。注意,t这个函数只能矩阵操作,即它里面的参数必须是矩阵。
> 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
- 矩阵相加、相减
> b=a
> a+b
[,1] [,2] [,3] [,4]
[1,] 2 8 14 20
[2,] 4 10 16 22
[3,] 6 12 18 24
> a-b
[,1] [,2] [,3] [,4]
[1,] 0 0 0 0
[2,] 0 0 0 0
[3,] 0 0 0 0
- 矩阵内积、相乘(内积指对应元素相乘)
> a=matrix(1:12,nrow=3,ncol=4)
> b=matrix(1:12,nrow=4,ncol=3)
> a*b
Error in a * b : 非整合陈列
> a%*%b
[,1] [,2] [,3]
[1,] 70 158 246
[2,] 80 184 288
[3,] 90 210 330
> c=a
> a*c
[,1] [,2] [,3] [,4]
[1,] 1 16 49 100
[2,] 4 25 64 121
[3,] 9 36 81 144
- 返回方阵对角线元素:diag(a)这里的a为矩阵
- 将一组向量作为对角矩阵的对角线元素得到对角矩阵:diag(x)这里的x为向量
> a=matrix(1:16,nrow=4,ncol=4)
> a
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> diag(a)
[1] 1 6 11 16
> diag(diag(a))
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 6 0 0
[3,] 0 0 11 0
[4,] 0 0 0 16
- 矩阵求逆:solve(a)
> a=matrix(rnorm(16),nrow=4,ncol=4)
> a
[,1] [,2] [,3] [,4]
[1,] 0.69634361 -0.76164497 1.1443136 0.1077397
[2,] -0.04774814 -0.08559135 1.0688682 -0.4232958
[3,] 0.91869660 -0.71873342 1.0451459 -0.1858793
[4,] 1.18105361 -1.09516245 -0.9547362 0.1628779
> solve(a)
[,1] [,2] [,3] [,4]
[1,] -1.6811543 -2.2187511 3.3361649 -0.8468740
[2,] -1.9456060 -2.5510082 3.3280071 -1.5447431
[3,] 0.4419637 -0.1595367 0.2292405 -0.4453470
[4,] 1.6990481 -1.9991649 -0.4703954 -0.7166711
- solve函数还可用于解方程组AX=B(高代的那个方程组)
> A=matrix(rnorm(16),nrow=4,ncol=4)
> B=c(1:4)
> solve(A,B)
[1] 3.3708918 1.6180605 -0.5903883 0.4152529
- 求矩阵的特征值与特征向量:eigen()
> a=diag(4)+1
> a
[,1] [,2] [,3] [,4]
[1,] 2 1 1 1
[2,] 1 2 1 1
[3,] 1 1 2 1
[4,] 1 1 1 2
> a.e=eigen(a,symmetric=T)
> a.e
eigen() decomposition
$values
[1] 5 1 1 1
$vectors
[,1] [,2] [,3] [,4]
[1,] -0.5 0.8660254 0.0000000 0.0000000
[2,] -0.5 -0.2886751 -0.5773503 -0.5773503
[3,] -0.5 -0.2886751 -0.2113249 0.7886751
[4,] -0.5 -0.2886751 0.7886751 -0.2113249
3、基本运算
3.1 平均值、和、最值
mean( )
sum( )
max( )
min( )
3.2 方差、连乘、标准差
var( )
prod( )
sd( )
> x=c(1:100)
> mean(x)
[1] 50.5
> sum(x)
[1] 5050
> max(x)
[1] 100
> min(x)
[1] 1
> var(x)
[1] 841.6667
> prod(x)
[1] 9.332622e+157
> sd(x)
[1] 29.01149
4、帮助函数
help()
> help(seq)
starting httpd help server ... done