R自学笔记(一)

   好久没有更新我的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

  1. mode(x)用于查看数据类型;
  2. 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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值