第四次课-向量

黄利东

29/03/2021

关于网络ppt内容的再次申名

R语言支持的数据类型(回顾上节课的内容)

-数值型(numeric)

> x <- 2
> typeof(x)#检验数据类型的函数,下同
## [1] "double"
> mode(x)
## [1] "numeric"
> class(x)
## [1] "numeric"
> y <- 1L
> typeof(y)
## [1] "integer"
> mode(y)
## [1] "numeric"
> class(y)
## [1] "integer"

-复数型(complex)

> x <- 1
> y <- 1
> z <- complex(real = x, imaginary = y)#生成复数
> z
## [1] 1+1i
> typeof(z)
## [1] "complex"

-逻辑型(logical)

> x <- TRUE
> y <- NA
> typeof(x)
## [1] "logical"
> typeof(y)
## [1] "logical"

-字符型(character)

> x <- "1"
> typeof(x)
## [1] "character"
> mode(x)
## [1] "character"
> class(x)
## [1] "character"

变量

程序语言中的变量用来保存输入的值或者计算得到的值。 在R中,变量可以保存所有的数据类型, 比如标量、向量、矩阵、数据框、函数等。

R变量名必须以字母、数字、下划线和句点组成, 变量名的第一个字符不能取为数字

R语言的数据结构/数据存储的对象类型

注意数据类型和数据结构的区别!

-向量/Vector

-矩阵/Matrix

-数组/Array

-数据框/Dataframe

-列表/List

向量及向量索引

向量运算是R语言编程的核心和特色

在数学中向量是具有方向的矢量,R语言中向量是同类型数据的集合

-生成向量 手动输入(等差数列)、函数输入、数据集和外部数据导入

> x <- 1:10#直接创建等差数列
> x
##  [1]  1  2  3  4  5  6  7  8  9 10
> class(x)
## [1] "integer"
> y <- c(2,5,7,-1,3,5)# c()函数创建 combine/connect/concatenate
> y
## [1]  2  5  7 -1  3  5
> class(y)
## [1] "numeric"
> seq(0,15,by=3)#生成序列
## [1]  0  3  6  9 12 15
> ?seq#帮助的例子
> rep(3,5)#重复生成
## [1] 3 3 3 3 3
> rep(3:10,2)
##  [1]  3  4  5  6  7  8  9 10  3  4  5  6  7  8  9 10
> rep(3:10,each=2)
##  [1]  3  3  4  4  5  5  6  6  7  7  8  8  9  9 10 10
> w <- c("Hi","Hello")
> class(w)
## [1] "character"
> LETTERS
##  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P" "Q" "R" "S"
## [20] "T" "U" "V" "W" "X" "Y" "Z"
> letters
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
> rnorm(10)
##  [1] -0.8330478  1.3731439  0.7663551  0.6074117 -1.0415817 -1.0018527
##  [7]  1.3200754  1.5555368 -0.6643449  0.2579656

向量索引

R向量是按下标索引,并且从1开始。

-向量索引 序号索引和逻辑索引

> x <- 10:20#直接创建
> x[3:5]
## [1] 12 13 14
> x[5:3]
## [1] 14 13 12
> x[c(1,9)]
## [1] 10 18
> x[-8]
##  [1] 10 11 12 13 14 15 16 18 19 20
> x[TRUE]
##  [1] 10 11 12 13 14 15 16 17 18 19 20
> x[FALSE]
## integer(0)
> x[c(T,F)]
## [1] 10 12 14 16 18 20
> x[-c(T,F)]
##  [1] 11 12 13 14 15 16 17 18 19 20
> x[c(F,T)]
## [1] 11 13 15 17 19
> x>13
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> x[x>13]
## [1] 14 15 16 17 18 19 20
> LETTERS[1:3];letters[1:3];
## [1] "A" "B" "C"
## [1] "a" "b" "c"

向量元素修改

> x <- 10:20#直接创建
> x[1] <- 1
> x[15] <- 1
> x
##  [1]  1 11 12 13 14 15 16 17 18 19 20 NA NA NA  1
> is.na(x)
##  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
## [13]  TRUE  TRUE FALSE
> x <- na.omit(x)
> x <- x[-c(1,12)]
> x
##  [1] 11 12 13 14 15 16 17 18 19 20

向量排序

> z <- runif(10)*100# 生成随机均匀分布
> z <- round(z)#取整,四舍五入
> sort(z)
##  [1] 10 28 30 42 70 77 86 88 93 98
> sort(z,decreasing = T)
##  [1] 98 93 88 86 77 70 42 30 28 10
> rev(z)#对比z理解这个函数的内涵
##  [1] 42 86 77 93 70 30 28 88 10 98
> w <- sample(LETTERS,10)
> w
##  [1] "K" "N" "W" "Y" "M" "U" "S" "A" "X" "B"
> sort(w)
##  [1] "A" "B" "K" "M" "N" "S" "U" "W" "X" "Y"
> rank(w)#位置信息
##  [1]  3  5  8 10  4  7  6  1  9  2
> order(w)
##  [1]  8 10  1  5  2  7  6  3  9  4

向量运算

-向量加减法运算

> x <- 10:20#直接创建
> y <- 30:40
> x+y
##  [1] 40 42 44 46 48 50 52 54 56 58 60
> z <- 1:5
> x+z
## Warning in x + z: longer object length is not a multiple of shorter object
## length
##  [1] 11 13 15 17 19 16 18 20 22 24 21

向量乘算运算

> x <- 1:4#直接创建
> y <- 5:8
> x*2
## [1] 2 4 6 8
> x*y
## [1]  5 12 21 32
> x%*%y#内积
##      [,1]
## [1,]   70
> crossprod(x,y)#内积第二种方法
##      [,1]
## [1,]   70
> x%o%y#向量外积方法1
##      [,1] [,2] [,3] [,4]
## [1,]    5    6    7    8
## [2,]   10   12   14   16
## [3,]   15   18   21   24
## [4,]   20   24   28   32
> outer(x,y)#向量外积方法2
##      [,1] [,2] [,3] [,4]
## [1,]    5    6    7    8
## [2,]   10   12   14   16
## [3,]   15   18   21   24
## [4,]   20   24   28   32
> tcrossprod(x,y)#向量外积方法3
##      [,1] [,2] [,3] [,4]
## [1,]    5    6    7    8
## [2,]   10   12   14   16
## [3,]   15   18   21   24
## [4,]   20   24   28   32

向量初等数学函数运算

> x <- 1:4#直接创建
> sqrt(x)
## [1] 1.000000 1.414214 1.732051 2.000000
> x^2
## [1]  1  4  9 16
> exp(x)
## [1]  2.718282  7.389056 20.085537 54.598150
> log(x)
## [1] 0.0000000 0.6931472 1.0986123 1.3862944
> sin(x)
## [1]  0.8414710  0.9092974  0.1411200 -0.7568025
> sin(x*pi)
## [1]  1.224606e-16 -2.449213e-16  3.673819e-16 -4.898425e-16
> cos(x)
## [1]  0.5403023 -0.4161468 -0.9899925 -0.6536436
> cos(x*pi)
## [1] -1  1 -1  1

向量统计函数运算

> set.seed(1111)
> x <- rnorm(100,1,2)#100个平均值为1,标准差为2的正态分布随机数
> min(x)
## [1] -4.861693
> which.min(x)
## [1] 6
> max(x)
## [1] 6.94693
> which.max(x)
## [1] 100
> range(x)
## [1] -4.861693  6.946930
> mean(x)
## [1] 1.483015
> var(x)
## [1] 4.873137
> sd(x)
## [1] 2.207518
> median(x)
## [1] 1.359668
> summary(x)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
## -4.86169 -0.04547  1.35967  1.48301  2.93994  6.94693
> length(x)
## [1] 100

问题?