0007-矩阵-矩阵中元素的访问

矩阵概念

  • 在R语言中,矩阵Matrix是将数据按行和列组织的一种数据对象,相当于二维数组,可以用于描述二维的数据
  • 与向量相似,矩阵的每个元素都拥有相同的数据类型。通常用列来表示来自不同变量的数据,用行来表示相同特性的数据

R语言中矩阵的创建

创建形式1:指定行数

m <- matrix(1:20, nrow = 4)
m

## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20

a <- matrix(1:20, nrow = 6)

# 注意!这里进行了循环补齐 # 且抛出一个warning!

a

## Warning in matrix(1:20, nrow = 6): 数据长度[20]不是矩阵行数[6]的整倍

## [,1] [,2] [,3] [,4]
## [1,] 1 7 13 19
## [2,] 2 8 14 20
## [3,] 3 9 15 1
## [4,] 4 10 16 2
## [5,] 5 11 17 3
## [6,] 6 12 18 4

创建形式2:指定列数

m <- matrix(1:20, ncol = 4)
m

## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20

m <- matrix(1:20, ncol = 6)

## Warning in matrix(1:20, ncol = 6): 数据长度[20]不是矩阵列数[6]的整倍数

m

## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 1
## [2,] 2 6 10 14 18 2
## [3,] 3 7 11 15 19 3
## [4,] 4 8 12 16 20 4

创建形式3:赋值同时给行和列命名

m <- matrix(c(1:20),
nrow = 4,
ncol = 5,
dimnames = list(c('r1','r2','r3','r4'),
c('c1','c2','c3','c4','c5')))
m

## c1 c2 c3 c4 c5
## r1 1 5 9 13 17
## r2 2 6 10 14 18
## r3 3 7 11 15 19
## r4 4 8 12 16 20

创建形式4:仅指定大小,不赋值

m <- matrix(nrow = 2, ncol = 3)
m

## [,1] [,2] [,3]
## [1,] NA NA NA
## [2,] NA NA NA

创建形式5:使用rbind或者cbind组合构建

- rbind:将两个向量/矩阵按照行合并为一个矩阵

- cbind:将两个向量/矩阵按照列合并为一个矩阵

a <- c(1:4)
b <- c(4:7)
m <- rbind(a,b)
m

## [,1] [,2] [,3] [,4]
## a 1 2 3 4
## b 4 5 6 7

a <- c(1:4)
b <- c(4:7)
m <- cbind(a,b)
m

## a b
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
## [4,] 4 7

m1 <- matrix(1:8, nrow = 2)
m2 <- matrix(2:9, nrow = 2)
m1

## [,1] [,2] [,3] [,4]
## [1,] 1 3 5 7
## [2,] 2 4 6 8

m2

## [,1] [,2] [,3] [,4]
## [1,] 2 4 6 8
## [2,] 3 5 7 9

m <- rbind(m1,m2)
m

## [,1] [,2] [,3] [,4]
## [1,] 1 3 5 7
## [2,] 2 4 6 8
## [3,] 2 4 6 8
## [4,] 3 5 7 9

m <- cbind(m1,m2)
m

## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 3 5 7 2 4 6 8
## [2,] 2 4 6 8 3 5 7 9

1. 通过位置引用

m

## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
## [1,] 1 3 5 7 2 4 6 8
## [2,] 2 4 6 8 3 5 7 9

m[2,3]

## [1] 6

m[2,]

## [1] 2 4 6 8 3 5 7 9

m[,8]

## [1] 8 9

m[3] # 第三个元素

## [1] 3

2. 通过名称引用

m <- matrix(c(1:20),
nrow = 4,
ncol = 5,
dimnames = list(c('r1','r2','r3','r4'),
c('c1','c2','c3','c4','c5')))
m

## c1 c2 c3 c4 c5
## r1 1 5 9 13 17
## r2 2 6 10 14 18
## r3 3 7 11 15 19
## r4 4 8 12 16 20

m['r1','c5']

## [1] 17

m['r2',]

## c1 c2 c3 c4 c5
## 2 6 10 14 18

m[,'c2']

## r1 r2 r3 r4
## 5 6 7 8

3. 通过删除方式访问

# 排除第1行和第3列
m[-1,-3]

## c1 c2 c4 c5
## r2 2 6 14 18
## r3 3 7 15 19
## r4 4 8 16 20

m[-1,]

## c1 c2 c3 c4 c5
## r2 2 6 10 14 18
## r3 3 7 11 15 19
## r4 4 8 12 16 20

m[,-2]

## c1 c3 c4 c5
## r1 1 9 13 17
## r2 2 10 14 18
## r3 3 11 15 19
## r4 4 12 16 20

4. 通过向量引用

m[c(1,2),c(4,5)]

## c4 c5
## r1 13 17
## r2 14 18

m[c(1:3),c(2:4)]

## c2 c3 c4
## r1 5 9 13
## r2 6 10 14
## r3 7 11 15

m[c(3,4),]

## c1 c2 c3 c4 c5
## r3 3 7 11 15 19
## r4 4 8 12 16 20

m[,c(2:5)]

## c2 c3 c4 c5
## r1 5 9 13 17
## r2 6 10 14 18
## r3 7 11 15 19
## r4 8 12 16 20

m[,c(2,5,4)]

## c2 c5 c4
## r1 5 17 13
## r2 6 18 14
## r3 7 19 15
## r4 8 20 16

m[-c(2,3),]

## c1 c2 c3 c4 c5
## r1 1 5 9 13 17
## r4 4 8 12 16 20

m['r3',c('c2','c1')]

## c2 c1
## 7 3

0008-矩阵-矩阵的编辑

1. 修改矩阵元素的值

m <- matrix(1:20,
nrow = 4,
ncol = 5,
dimnames = list(c("A","B","C","D"),
c("a","b","c","d","e")))
m

## a b c d e
## A 1 5 9 13 17
## B 2 6 10 14 18
## C 3 7 11 15 19
## D 4 8 12 16 20

m[4,5] = 666
m

## a b c d e
## A 1 5 9 13 17
## B 2 6 10 14 18
## C 3 7 11 15 19
## D 4 8 12 16 666

m['A','e'] = 777
m

## a b c d e
## A 1 5 9 13 777
## B 2 6 10 14 18
## C 3 7 11 15 19
## D 4 8 12 16 666

m[1,] = c(11,22,33,44,55)
m

## a b c d e
## A 11 22 33 44 55
## B 2 6 10 14 18
## C 3 7 11 15 19
## D 4 8 12 16 666

m[,'a'] = c(33,44,55,66)
m

## a b c d e
## A 33 22 33 44 55
## B 44 6 10 14 18
## C 55 7 11 15 19
## D 66 8 12 16 666

2. 删除指定的行或列

m <- m[-3,]
m

## a b c d e
## A 33 22 33 44 55
## B 44 6 10 14 18
## D 66 8 12 16 666

m <- m[,-2]
m

## a c d e
## A 33 33 44 55
## B 44 10 14 18
## D 66 12 16 666

3. 矩阵的合并

之前介绍过了rbind和cbind

m1 <- matrix(1:20, nrow = 4)
m2 <- matrix(31:50,nrow = 4)
m1

## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20

m2

## [,1] [,2] [,3] [,4] [,5]
## [1,] 31 35 39 43 47
## [2,] 32 36 40 44 48
## [3,] 33 37 41 45 49
## [4,] 34 38 42 46 50

m <- rbind(m1,m2)
m

## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
## [5,] 31 35 39 43 47
## [6,] 32 36 40 44 48
## [7,] 33 37 41 45 49
## [8,] 34 38 42 46 50

m <- cbind(m1,m2)
m

## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
## [1,] 1 5 9 13 17 31 35 39 43 47
## [2,] 2 6 10 14 18 32 36 40 44 48
## [3,] 3 7 11 15 19 33 37 41 45 49
## [4,] 4 8 12 16 20 34 38 42 46 50

m <- rbind(m1,c(111,222))

m

## Warning in rbind(m1, c(111, 222)): number of columns of result is not a multiple ## of vector length (arg 2)

## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
## [5,] 111 222 111 222 111

m <- cbind(m1,100)
m

## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 100
## [2,] 2 6 10 14 18 100
## [3,] 3 7 11 15 19 100
## [4,] 4 8 12 16 20 100

0009-数组

数组的定义

  • 在R语言中,可以认为数组是矩阵的扩展,它将矩阵扩展到2维以上
  • 如果给定的数组是1维的则相当于向量,2维的相当于矩阵
  • R语言中的数组元素的类型也是单一的,可以是数值型、逻辑型、字符型或复数型

1. 创建数组

a <- array(1:10)
a

## [1] 1 2 3 4 5 6 7 8 9 10

a <- array(1:24, dim = c(4,6))
a

## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 1 5 9 13 17 21
## [2,] 2 6 10 14 18 22
## [3,] 3 7 11 15 19 23
## [4,] 4 8 12 16 20 24

a <- array(1:24, dim = c(4,5,3))
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 1 5 9 13
## [2,] 22 2 6 10 14
## [3,] 23 3 7 11 15
## [4,] 24 4 8 12 16
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 17 21 1 5 9
## [2,] 18 22 2 6 10
## [3,] 19 23 3 7 11
## [4,] 20 24 4 8 12

name <- c("刘能","赵四","广坤","大脚")
score <- c("数学","物理","化学","计算机","英语")
times <- c("测验","期中","期末")
a <- array(sample(1:100,60,replace=TRUE),
dim = c(4,5,3),
dimnames = list(name,score,times))
a

## , , 测验
##
## 数学 物理 化学 计算机 英语
## 刘能 88 47 66 98 32
## 赵四 63 37 51 23 55
## 广坤 31 21 10 67 43
## 大脚 55 11 27 27 6
##
## , , 期中
##
## 数学 物理 化学 计算机 英语
## 刘能 12 29 70 3 26
## 赵四 58 38 39 32 63
## 广坤 63 70 54 81 75
## 大脚 84 65 59 25 69
##
## , , 期末
##
## 数学 物理 化学 计算机 英语
## 刘能 52 64 49 75 47
## 赵四 57 91 100 43 87
## 广坤 62 32 91 36 28
## 大脚 18 6 30 81 84

2. 数组的索引

a <- array(1:60, dim = c(4,5,3))
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 30 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 41 45 49 53 57
## [2,] 42 46 50 54 58
## [3,] 43 47 51 55 59
## [4,] 44 48 52 56 60

a[3,2,3]

## [1] 47

a[1,3,]

## [1] 9 29 49

a[3,,]

## [,1] [,2] [,3]
## [1,] 3 23 43
## [2,] 7 27 47
## [3,] 11 31 51
## [4,] 15 35 55
## [5,] 19 39 59

a[,5,]

## [,1] [,2] [,3]
## [1,] 17 37 57
## [2,] 18 38 58
## [3,] 19 39 59
## [4,] 20 40 60

a[1:3,c(1,3),]

## , , 1
##
## [,1] [,2]
## [1,] 1 9
## [2,] 2 10
## [3,] 3 11
##
## , , 2
##
## [,1] [,2]
## [1,] 21 29
## [2,] 22 30
## [3,] 23 31
##
## , , 3
##
## [,1] [,2]
## [1,] 41 49
## [2,] 42 50
## [3,] 43 51

3. 数组的编辑

  • 修改元素的值
  • 删除元素

a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 30 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 41 45 49 53 57
## [2,] 42 46 50 54 58
## [3,] 43 47 51 55 59
## [4,] 44 48 52 56 60

a[2,3,1] <- 18
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 18 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 30 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 41 45 49 53 57
## [2,] 42 46 50 54 58
## [3,] 43 47 51 55 59
## [4,] 44 48 52 56 60

a[2,3,] <- 18
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 18 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 29 33 37
## [2,] 22 26 18 34 38
## [3,] 23 27 31 35 39
## [4,] 24 28 32 36 40
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 41 45 49 53 57
## [2,] 42 46 18 54 58
## [3,] 43 47 51 55 59
## [4,] 44 48 52 56 60

a[,3,] <- 66
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 66 13 17
## [2,] 2 6 66 14 18
## [3,] 3 7 66 15 19
## [4,] 4 8 66 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 66 33 37
## [2,] 22 26 66 34 38
## [3,] 23 27 66 35 39
## [4,] 24 28 66 36 40
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 41 45 66 53 57
## [2,] 42 46 66 54 58
## [3,] 43 47 66 55 59
## [4,] 44 48 66 56 60

a[,,3] <- 100
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 66 13 17
## [2,] 2 6 66 14 18
## [3,] 3 7 66 15 19
## [4,] 4 8 66 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 66 33 37
## [2,] 22 26 66 34 38
## [3,] 23 27 66 35 39
## [4,] 24 28 66 36 40
##
## , , 3
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 100 100 100 100 100
## [2,] 100 100 100 100 100
## [3,] 100 100 100 100 100
## [4,] 100 100 100 100 100

a <- a[,,-3]
a

## , , 1
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 66 13 17
## [2,] 2 6 66 14 18
## [3,] 3 7 66 15 19
## [4,] 4 8 66 16 20
##
## , , 2
##
## [,1] [,2] [,3] [,4] [,5]
## [1,] 21 25 66 33 37
## [2,] 22 26 66 34 38
## [3,] 23 27 66 35 39
## [4,] 24 28 66 36 40

4. 数组的常用运算

  • /

a <- array(1:24, dim = c(2,3,4))
b <- array(24:1, dim = c(2,3,4))

a

## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 7 9 11
## [2,] 8 10 12
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 13 15 17
## [2,] 14 16 18
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 19 21 23
## [2,] 20 22 24

b

## , , 1
##
## [,1] [,2] [,3]
## [1,] 24 22 20
## [2,] 23 21 19
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 18 16 14
## [2,] 17 15 13
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 12 10 8
## [2,] 11 9 7
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 6 4 2
## [2,] 5 3 1

a+b

## , , 1
##
## [,1] [,2] [,3]
## [1,] 25 25 25
## [2,] 25 25 25
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 25 25 25
## [2,] 25 25 25
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 25 25 25
## [2,] 25 25 25
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 25 25 25
## [2,] 25 25 25

a-b

## , , 1
##
## [,1] [,2] [,3]
## [1,] -23 -19 -15
## [2,] -21 -17 -13
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] -11 -7 -3
## [2,] -9 -5 -1
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 3 7 11
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 13 17 21
## [2,] 15 19 23

a*b

## , , 1
##
## [,1] [,2] [,3]
## [1,] 24 66 100
## [2,] 46 84 114
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 126 144 154
## [2,] 136 150 156
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 156 150 136
## [2,] 154 144 126
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 114 84 46
## [2,] 100 66 24

a/b

## , , 1
##
## [,1] [,2] [,3]
## [1,] 0.04166667 0.1363636 0.2500000
## [2,] 0.08695652 0.1904762 0.3157895
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 0.3888889 0.5625000 0.7857143
## [2,] 0.4705882 0.6666667 0.9230769
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 1.083333 1.500000 2.125000
## [2,] 1.272727 1.777778 2.571429
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 3.166667 5.250000 11.5
## [2,] 4.000000 7.333333 24.0

0010-列表

列表的概念

  • 在R语言中,向量、矩阵和数组的元素要求必须是同一类型的数据,在使用过程中,可能一个数据对象需要保存不同类型的数据,则可以使用列表list来实现。
  • 列表是对象的集合,可以包含向量、矩阵、数组、数据框,甚至是另外一个列表,且在列表中要求每个成分都要有一个名称。
  • 列表中的对象又称为它的分量components。

1. 创建列表

a <- list(姓名 = "张三", 工资 = 1800, 性别 = "男")
a

## $姓名
## [1] "张三"
##
## $工资
## [1] 1800
##
## $性别
## [1] "男"

a <- list(姓名 = c("张三","李四"), 工资 = c(1800,2800), 性别 = c("男","女"))
a

## $姓名
## [1] "张三" "李四"
##
## $工资
## [1] 1800 2800
##
## $性别
## [1] "男" "女"

a <- list(c("张三","李四"), c(1800,2800), c("男","女"))
a

## [[1]]
## [1] "张三" "李四"
##
## [[2]]
## [1] 1800 2800
##
## [[3]]
## [1] "男" "女"

a <- list(姓名 = c("张三","李四","王五"),
科目 = c("语文","数学","英语","物理","计算机"),
成绩 = matrix(sample(1:100,15), nrow = 3))
a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

2. 列表的索引

  • 直接索引

a[[1]]

## [1] "张三" "李四" "王五"

typeof(a[[1]])

## [1] "character"

a[1]

## $姓名
## [1] "张三" "李四" "王五"

typeof(a[1])

## [1] "list"

a[1:2]

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"

a[c(1,3)]

## $姓名
## [1] "张三" "李四" "王五"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a[-1]

## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

  • 名称索引

a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a$姓名

## [1] "张三" "李四" "王五"

a$成绩

## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a['姓名']

## $姓名
## [1] "张三" "李四" "王五"

a[['姓名']]

## [1] "张三" "李四" "王五"

  • 二级索引

a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a[1]

## $姓名
## [1] "张三" "李四" "王五"

a[1][1]

## $姓名
## [1] "张三" "李四" "王五"

typeof(a[1][1])

## [1] "list"

a[1][[1]]

## [1] "张三" "李四" "王五"

typeof(a[1][[1]])

## [1] "character"

a[[1]][1]

## [1] "张三"

typeof(a[[1]])

## [1] "character"

a$姓名

## [1] "张三" "李四" "王五"

a$姓名[1]

## [1] "张三"

typeof(a$姓名[1])

## [1] "character"

3. 列表的编辑

  • 修改某个成分的元素值

a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a[[1]][1] <- "小明"
a

## $姓名
## [1] "小明" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

其他的引用方式来重新赋值也是可以的,都一样

a$姓名 <- "小米"
a

## $姓名
## [1] "小米"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a$姓名 <- c('test','john','xx')
a

## $姓名
## [1] "test" "john" "xx"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

  • 修改成分的整个值

a

## $姓名
## [1] "test" "john" "xx"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a[[1]] # 是个vector

## [1] "test" "john" "xx"

a[[1]] <- c('aa', 'bnb')
a

## $姓名
## [1] "aa" "bnb"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a$姓名 <- c('xx','dd')
a

## $姓名
## [1] "xx" "dd"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a[1]

## $姓名
## [1] "xx" "dd"

typeof(a[1]) # vector不能赋值给list,只有list能赋值给list,看下面的例子

## [1] "list"

a[1] <- c('test','test2)
a

## 抛出错误

a[1] <- list(c('test','test2'))
a

## $姓名
## [1] "test" "test2"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

  • 修改多个成分值

a

## $姓名
## [1] "test" "test2"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a[c(1,2)] <- c(list(c('a','b')),
list(c('maths','computer')))
a

## $姓名
## [1] "a" "b"
##
## $科目
## [1] "maths" "computer"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

  • 添加成分

a

## $姓名
## [1] "a" "b"
##
## $科目
## [1] "maths" "computer"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53

a$地址 <- c('Tianjin','Shanghai')
a

## $姓名
## [1] "a" "b"
##
## $科目
## [1] "maths" "computer"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 91 35 37 97 90
## [2,] 92 56 39 93 80
## [3,] 7 6 33 9 53
##
## $地址
## [1] "Tianjin" "Shanghai"

a <- list(姓名 = c("张三","李四","王五"),
科目 = c("语文","数学","英语","物理","计算机"),
成绩 = matrix(sample(1:100,15), nrow = 3))
a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 50 32 63 77 39
## [2,] 82 84 55 27 34
## [3,] 24 45 8 19 61

a <- c(a,
list(电话 = c(111111,222222)))
a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 50 32 63 77 39
## [2,] 82 84 55 27 34
## [3,] 24 45 8 19 61
##
## $电话
## [1] 111111 222222

a <- list(a,
list(电话 = c(111111,222222)))
a # 这样就是a变成了list,里面的元素是2个list

## [[1]]
## [[1]]$姓名
## [1] "张三" "李四" "王五"
##
## [[1]]$科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## [[1]]$成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 50 32 63 77 39
## [2,] 82 84 55 27 34
## [3,] 24 45 8 19 61
##
## [[1]]$电话
## [1] 111111 222222
##
##
## [[2]]
## [[2]]$电话
## [1] 111111 222222

  • 删除成分

a <- list(姓名 = c("张三","李四","王五"),
科目 = c("语文","数学","英语","物理","计算机"),
成绩 = matrix(sample(1:100,15), nrow = 3))
a

## $姓名
## [1] "张三" "李四" "王五"
##
## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 85 19 59 11 54
## [2,] 74 6 10 21 75
## [3,] 31 65 72 7 28

a$姓名 <- NULL
a

## $科目
## [1] "语文" "数学" "英语" "物理" "计算机"
##
## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 85 19 59 11 54
## [2,] 74 6 10 21 75
## [3,] 31 65 72 7 28

a['科目'] <- NULL
a

## $成绩
## [,1] [,2] [,3] [,4] [,5]
## [1,] 85 19 59 11 54
## [2,] 74 6 10 21 75
## [3,] 31 65 72 7 28

a[1] <- NULL
a

## named list()

## 变成了空list

0011-数据框Dataframe

数据框Dataframe的概念

  • 数据库Dataframe组织数据的结构与矩阵相似
  • 各列的数据类型可以不相同
  • 数据框IDE每列是一个变量,每行是一个观测样本
  • 每列长度必须相同

1. 创建Dataframe

df <- data.frame(姓名 = c("张三","李四","王五"),
成绩 = c(66,77,88),
籍贯 = c("天津","北京","广州"))
df

## 姓名 成绩 籍贯
## 1 张三 66 天津
## 2 李四 77 北京
## 3 王五 88 广州

df <- data.frame(姓名 = c("张三","李四","王五"),
成绩 = c(66,77,88),
籍贯 = c("天津","北京","广州"),
row.names = c("row1","row2","row3"))
df

## 姓名 成绩 籍贯
## row1 张三 66 天津
## row2 李四 77 北京
## row3 王五 88 广州

df <- data.frame(姓名 = c("张三","李四","王五"),
成绩 = c(66,77,88),
籍贯 = c("天津","北京","广州"))
row.names(df) <- c("row1","row2","row3")
df

## 姓名 成绩 籍贯
## row1 张三 66 天津
## row2 李四 77 北京
## row3 王五 88 广州

name <- c("张三","李四","王五")
sex <- c("男","女","男")
age <- c(14,16,17)
df <- data.frame(name,sex,age)
df

## name sex age
## 1 张三 男 14
## 2 李四 女 16
## 3 王五 男 17

可以发现col.names自动定义为vector的名称

ls1 <- list(name = name,
sex = sex,
age = age)
ls1

## $name
## [1] "张三" "李四" "王五"
##
## $sex
## [1] "男" "女" "男"
##
## $age
## [1] 14 16 17

df <- as.data.frame(ls1)
df

## name sex age
## 1 张三 男 14
## 2 李四 女 16
## 3 王五 男 17

上述用法可以将list转换为Dataframe

a <- array(1:20,c(4,5))
a

## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20

b <- as.data.frame(a)
b

## V1 V2 V3 V4 V5
## 1 1 5 9 13 17
## 2 2 6 10 14 18
## 3 3 7 11 15 19
## 4 4 8 12 16 20

row.names(b) <- c('a','b','c','d')
b

## V1 V2 V3 V4 V5
## a 1 5 9 13 17
## b 2 6 10 14 18
## c 3 7 11 15 19
## d 4 8 12 16 20

a <- array(1:15, c(3,5), dimnames = list(c('r1','r2','r3'), c('c1','c2','c3','c4','c5')))
a

## c1 c2 c3 c4 c5
## r1 1 4 7 10 13
## r2 2 5 8 11 14
## r3 3 6 9 12 15

df <- as.data.frame(a)
df

## c1 c2 c3 c4 c5
## r1 1 4 7 10 13
## r2 2 5 8 11 14
## r3 3 6 9 12 15

a <- matrix(1:20, nrow = 5)
a

## [,1] [,2] [,3] [,4]
## [1,] 1 6 11 16
## [2,] 2 7 12 17
## [3,] 3 8 13 18
## [4,] 4 9 14 19
## [5,] 5 10 15 20

b <- as.data.frame(a)
b

## V1 V2 V3 V4
## 1 1 6 11 16
## 2 2 7 12 17
## 3 3 8 13 18
## 4 4 9 14 19
## 5 5 10 15 20

a <- matrix(1:21, nrow = 3, dimnames = list(c('r1','r2','r3')))
a

## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## r1 1 4 7 10 13 16 19
## r2 2 5 8 11 14 17 20
## r3 3 6 9 12 15 18 21

b <- as.data.frame(a)
b

## V1 V2 V3 V4 V5 V6 V7
## r1 1 4 7 10 13 16 19
## r2 2 5 8 11 14 17 20
## r3 3 6 9 12 15 18 21

colnames(b) <- c(1,2,3,4,5,6,7)
b

## 1 2 3 4 5 6 7
## r1 1 4 7 10 13 16 19
## r2 2 5 8 11 14 17 20
## r3 3 6 9 12 15 18 21

a <- matrix(1:21, nrow = 3, dimnames = list(c(),c('c1','c2','c3','c4','c5','c6','c7')))
b <- as.data.frame(a)
b

## c1 c2 c3 c4 c5 c6 c7
## 1 1 4 7 10 13 16 19
## 2 2 5 8 11 14 17 20
## 3 3 6 9 12 15 18 21

2. Dataframe的引用

df <- data.frame(姓名 = c('张三','李四','王五'),
成绩 = c(66,77,88),
籍贯 = c('天津','北京','广州'))
df

## 姓名 成绩 籍贯
## 1 张三 66 天津
## 2 李四 77 北京
## 3 王五 88 广州

df[2,]

## 姓名 成绩 籍贯
## 2 李四 77 北京

df[,2]

## [1] 66 77 88

class(df[2,])

## [1] "data.frame"

class(df[,2])

## [1] "numeric"

class(df[,1])

## [1] "factor"

class(df[,3])

## [1] "factor"

df[1:2,]

## 姓名 成绩 籍贯
## 1 张三 66 天津
## 2 李四 77 北京

df[c(3,1),]

## 姓名 成绩 籍贯
## 3 王五 88 广州
## 1 张三 66 天津

df[1,2]

## [1] 66

df['姓名'] # 取Dataframe

## 姓名
## 1 张三
## 2 李四
## 3 王五

class(df['姓名'])

## [1] "data.frame"

df[['姓名']] # 取factor

## [1] 张三 李四 王五
## Levels: 李四 王五 张三

class(df[['姓名']])

## [1] "factor"

df[,'姓名'] # 取factor

## [1] 张三 李四 王五
## Levels: 李四 王五 张三

class(df[,'姓名'])

## [1] "factor"

df$姓名 # 取factor

## [1] 张三 李四 王五
## Levels: 李四 王五 张三

class(df$姓名)

## [1] "factor"

如何访问元素?

df

## 姓名 成绩 籍贯
## 1 张三 66 天津
## 2 李四 77 北京
## 3 王五 88 广州

df[1,1]

## [1] 张三
## Levels: 李四 王五 张三

df[[1]][1]

## [1] 张三
## Levels: 李四 王五 张三

df$姓名[1]

## [1] 张三
## Levels: 李四 王五 张三

3. Dataframe的增删改

  • 行:rbind
  • 列:cbind, data.frame

df

## 姓名 成绩 籍贯
## 1 张三 66 天津
## 2 李四 77 北京
## 3 王五 88 广州

ls1 <- list("赵四",100,"辽宁")
df <- rbind(df, ls1)
## 抛出错误
## 因子层次有错,产生了NA因子层次有错,产生了NA

df2 <- data.frame(姓名 = c('张三','李四','王五'),
成绩 = c(66,77,88),
籍贯 = c('天津','北京','广州'),
stringsAsFactors = FALSE)

ls1 <- list("赵四",100,"辽宁")
df2 <- rbind(df2,ls1)
df2

## 姓名 成绩 籍贯
## 1 张三 66 天津
## 2 李四 77 北京
## 3 王五 88 广州
## 4 赵四 100 辽宁

ls2 <- list('男','男','女','女')
df2 <- cbind(df2, ls2)
df2

## 姓名 成绩 籍贯 "男" "男" "女" "女"
## 1 张三 66 天津 男 男 女 女
## 2 李四 77 北京 男 男 女 女
## 3 王五 88 广州 男 男 女 女
## 4 赵四 100 辽宁 男 男 女 女

出问题了!

应该这么写

df2 <- data.frame(姓名 = c('张三','李四','王五'),
成绩 = c(66,77,88),
籍贯 = c('天津','北京','广州'),
stringsAsFactors = FALSE)

ls1 <- list("赵四",100,"辽宁")
df2 <- rbind(df2,ls1)
ls2 <- list(性别=c('男','男','女','女'))
df2 <- cbind(df2, ls2)
df2

## 姓名 成绩 籍贯 性别
## 1 张三 66 天津 男
## 2 李四 77 北京 男
## 3 王五 88 广州 女
## 4 赵四 100 辽宁 女

class(df$成绩)

## [1] "numeric"

df[1,2] <- '33'
df

## 姓名 成绩 籍贯
## 1 张三 33 天津
## 2 李四 77 北京
## 3 王五 88 广州

class(df$成绩)

## [1] "character"

df[1,2] <- 22
df

## 姓名 成绩 籍贯
## 1 张三 22 天津
## 2 李四 77 北京
## 3 王五 88 广州

class(df$成绩)

## [1] "character"

就是说,如果numeric中修改为string之后,所有的number都会转换为string!

df2$姓名[2]

## [1] "李四"

df2$姓名[2] <- c("哈哈")
df2 # 想这么操作必须定义Dataframe的时候stringAsFactor=FALSE

## 姓名 成绩 籍贯 性别
## 1 张三 66 天津 男
## 2 哈哈 77 北京 男
## 3 王五 88 广州 女
## 4 赵四 100 辽宁 女

接下来展示如何删除行列,使用减号即可

df2

## 姓名 成绩 籍贯 性别
## 1 张三 66 天津 男
## 2 哈哈 77 北京 男
## 3 王五 88 广州 女
## 4 赵四 100 辽宁 女

df2 <- df2[-3]
df2

## 姓名 成绩 性别
## 1 张三 66 男
## 2 哈哈 77 男
## 3 王五 88 女
## 4 赵四 100 女

df2 <- df2[-1,]
df2

## 姓名 成绩 性别
## 2 哈哈 77 男
## 3 王五 88 女
## 4 赵四 100 女

df2 <- df2[,-3]
df2

## 姓名 成绩
## 2 哈哈 77
## 3 王五 88
## 4 赵四 100

同样的,也可以指定向量值来删除行列值

df3 <- df2[,c(-2,-3)]
df3

## [1] "哈哈" "王五" "赵四"

class(df3)

## [1] "character"

上面直接变成了string的形式,如何保持Dataframe呢

df3 <- df2[,c(-2,-3),drop=FALSE]
df3

## 姓名
## 2 哈哈
## 3 王五
## 4 赵四

这样就可以了 看一下,发现不存在的第三列也是可以指定删除的,这里只删除了第2列,drop=FALSE可以保留原来的数据格式Dataframe

df

## 姓名 成绩 籍贯
## 1 张三 22 天津
## 2 李四 77 北京
## 3 王五 88 广州

df <- df[-2,-2]
df

## 姓名 籍贯
## 1 张三 天津
## 3 王五 广州

可以看到这里是分别删除了行和列

0012-因子

定义因子与插入值

city <- c("天津","北京","广州","天津","上海","北京","广州","天津")
cityFactor <- factor(city)
cityFactor

## [1] 天津 北京 广州 天津 上海 北京 广州 天津
## Levels: 北京 广州 上海 天津

因子内不同的数值即为水平

str(cityFactor)

## Factor w/ 4 levels "北京","广州",..: 4 1 2 4 3 1 2 4

length(cityFactor)

## [1] 8

因子长度是数据的长度,而不是水平的个数

city <- c("天津","北京","广州","天津","上海","北京","广州")
city

## [1] "天津" "北京" "广州" "天津" "上海" "北京" "广州"

f <- factor(city)
f

## [1] 天津 北京 广州 天津 上海 北京 广州
## Levels: 北京 广州 上海 天津

str(f)

## Factor w/ 4 levels "北京","广州",..: 4 1 2 4 3 1 2

length(f)

## [1] 7

f[2] <- "深圳"

## Warning in `[<-.factor`(`*tmp*`, 2, value = "深圳"): invalid factor level, NA
## generated

f

## [1] 天津 <NA> 广州 天津 上海 北京 广州
## Levels: 北京 广州 上海 天津

发现抛出warning,而且并没有修改成功第二个元素而是给了一个NA值

也就是说 如果想要修改一个因子,那么它一定是在level中存在的,不存在level中的字符串不可赋值给因子,且抛出warning并且赋值一个因子NA

但是如果修改为已存在的值,是可以成功修改的

f[2] <- "广州"
f

## [1] 天津 广州 广州 天津 上海 北京 广州
## Levels: 北京 广州 上海 天津

广州这个level存在,所以可以修改成功

除此之外,还可以在创建factor的时候指定一个level

f <- factor(city,levels = c("天津","北京","上海","深圳"))
f

## [1] 天津 北京 <NA> 天津 上海 北京 <NA>
## Levels: 天津 北京 上海 深圳

然后现在由于深圳在level中,所以可以赋值,用深圳来填充第3,7个factor

f[3] <- "深圳"
f[7] <- "石家庄"

## Warning in `[<-.factor`(`*tmp*`, 7, value = "石家庄"): invalid factor level, NA
## generated

f

## [1] 天津 北京 深圳 天津 上海 北京 <NA>
## Levels: 天津 北京 上海 深圳

可以看到,第3个成功填充,第7个失败了,因为石家庄不在level里

tapply()函数

语法形式:

# tapply(x,f,g)
# x: 向量
# f: 因子
# g: 函数

操作形式: 将x按照f的因子进行分组,并针对分组应用g函数

hours为加班时间,使用tapply函数将name处理为因子,计算每个人的加班时间和

hours <- c(2,4,1,3,4,6,2,4)
name <- c("xiaoming","cuihua","liuneng","xiaoming","zhaosi","cuihua","cuihua","xiaoming")
tapply(hours, name, sum)

## cuihua liuneng xiaoming zhaosi
## 12 1 9 4

tapply(hours, name, max)

## cuihua liuneng xiaoming zhaosi
## 6 1 4 4

从年龄和性别分组来使用tapply

demo <- data.frame(list(gender=c("male",'female','female','male','male','female','male'),
age = c(11,19,22,10,9,25,35),
hours=c(3,2,1,4,5,2,1)))
demo

## gender age hours
## 1 male 11 3
## 2 female 19 2
## 3 female 22 1
## 4 male 10 4
## 5 male 9 5
## 6 female 25 2
## 7 male 35 1

给年龄分层

demo$ifAdult <- ifelse(demo$age > 18, "Adult","Child")
demo

## gender age hours ifAdult
## 1 male 11 3 Child
## 2 female 19 2 Adult
## 3 female 22 1 Adult
## 4 male 10 4 Child
## 5 male 9 5 Child
## 6 female 25 2 Adult
## 7 male 35 1 Adult

tapply(demo$hours, list(demo$gender, demo$ifAdult), mean)

## Adult Child
## female 1.666667 NA
## male 1.000000 4

这里的意思是,对demo$hours这个向量做处理,然后根据index性别和index是否成年来分组,取均值,可见,既为女性又是陈年人的平均hours为1.6666667,既为女性又是未成年的hours值不存在,既为男性又是成年的hours平均为1,即使男性又是未成年的hours平均值为4 共分成了四组,因为gender有两种可能,ifAdult也是两种可能,所以组合为2*2

split()函数

demo

## gender age hours ifAdult
## 1 male 11 3 Child
## 2 female 19 2 Adult
## 3 female 22 1 Adult
## 4 male 10 4 Child
## 5 male 9 5 Child
## 6 female 25 2 Adult
## 7 male 35 1 Adult

然后

split(demo, list(demo$gender,demo$ifAdult))

## $female.Adult
## gender age hours ifAdult
## 2 female 19 2 Adult
## 3 female 22 1 Adult
## 6 female 25 2 Adult
##
## $male.Adult
## gender age hours ifAdult
## 7 male 35 1 Adult
##
## $female.Child
## [1] gender age hours ifAdult
## <0 rows> (or 0-length row.names)
##
## $male.Child
## gender age hours ifAdult
## 1 male 11 3 Child
## 4 male 10 4 Child
## 5 male 9 5 Child

理解为pandas的groupby,根据index分成几组

这里给的是Dataframe,也可以输入列来查看单独列的拆分

split(demo$hours, demo$ifAdult)

## $Adult
## [1] 2 1 2 1
##
## $Child
## [1] 3 4 5

可见hours根据ifAdult分成了两组

或者根据两个index来拆分

split(demo$hours, list(demo$gender,demo$ifAdult))

## $female.Adult
## [1] 2 1 2
##
## $male.Adult
## [1] 1
##
## $female.Child
## numeric(0)
##
## $male.Child
## [1] 3 4 5

这里把hours根据男女,是否成年拆成了四组

R Learnilng 十八讲7-12相关推荐

  1. R Learnilng 十八讲13-17

    0013-选择结构 1. 条件表达式if x <- 24 if(x%%2==0) print("偶数") ## [1] "偶数" x <- 23 i ...

  2. R Learnilng 十八讲1-6

    [R learning]-0001-向量-创建向量 1. 直接创建 # 创建等差序列 x1 <- 1:10 x1 ## [1] 1 2 3 4 5 6 7 8 9 10 # 创建一个值的向量 x ...

  3. R learning 十八讲 0018-R语言绘图基础

    0018-R语言绘图基础 2020-07-29更新:使用代码块,看起来更方便.更改了第6节: 这次不介绍如ggplot2等绘图包, 只记录一些R基础就能实现的东西~ 跟着我爪子敲一遍,相信你会有收获! ...

  4. 小甲鱼Python3学习笔记之第二十八讲(仅记录学习)

    第二十八讲:文件:因为懂你,所以永恒 一.知识点: 0.file对象利用open函数来创建. 1.file文件的打开模式:f = open('文件地址','r/w/x/a等') 'r':只读模式,以只 ...

  5. 趣谈网络协议笔记-二(第十八讲)

    趣谈网络协议笔记-二(第十八讲) DNS协议:网络世界的地址簿 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 正文 DNS用于域名解析,但也不仅仅是用于域名解析,不仅仅是将域名转换成IP. 在 ...

  6. 视觉SLAM十四讲 第1-2讲 初识SLAM

    视觉SLAM十四讲 第1-2讲 初识SLAM 1. slam 是什么 2. SLAM基本模块 3. 相机的种类 4. 视觉slam基本流程 5. 非/线性系统.非/高斯系统 6. CMake 1. s ...

  7. python字符串操作入门十八讲——合集一

    字符串操作十八讲合集 导读

  8. 前端简单入门第十八讲 使用jQuery实现表格的隔行换色

    还记得之前我使用JavaScript来实现表格的隔行换色效果吗?如果读者初次翻阅本文,可记得看看前端简单入门第十二讲 使用JavaScript完成后台数据展示表格的隔行换色!现在我就来使用jQuery ...

  9. 名词解释第二十八讲:跨链

    这里是王团长区块链学院,与最优秀的区块链人一起成长!今天给大家讲讲跨链. 点击观看视频教程:名词解释第二十八讲:跨链 随着区块链技术的发展,出现了越来越多的链,包括公有链.联盟链.私有链层出不穷,但每 ...

最新文章

  1. MySQL 实战 定时备份数据库
  2. Java字符串用“。”(点)分隔。
  3. delphi开发回忆录——示例源码下载
  4. 基于opencv实现图像差异检测
  5. 阿德:我在去哪儿干了些什么,3个月业绩400%提升
  6. linux 内核日志等级,Linux系统中日志级别详情
  7. 深耕边缘计算 揭秘阿里云边缘云网一体化的技术实践
  8. 高品质互动在线课堂:前端开发优化实践
  9. Web网络知识:什么是HTTP请求合并?
  10. 靶场练习第二十五天~vulnhub靶场之Raven-2
  11. easyui使用心得
  12. MAC OS X 技术内幕 学习笔记之一 MAC OS的变迁
  13. oracle改字符集sjis,MySQL字符集专题(字符集,校对,乱码)_MySQL
  14. 2017年下半年综合素质作文
  15. 博主自我介绍、当前已经成立的技术分局【专栏必读】
  16. 2022高等代数笔记整理
  17. 2020第六届上海市大学生网络安全大赛线上赛Misc-可乐加冰
  18. 艺多不压身—摩尔斯电码
  19. java 数组形式字符串_java 数组格式字符串转化为字符串
  20. Realme K60 Ultra参数配置怎么样?红米Realme K60 Ultra电池容量

热门文章

  1. 15个目标检测开源数据集汇总
  2. PPF(Point Pair Features)原理及实战技巧
  3. 100万+奖金池!目标检测、车牌识别、人体分割等赛事全面启动! ECV-2021 来了...
  4. OpenCv Mat -类 成员函数
  5. java中JFrame类中函数addWindowListener(new WindowAdapter)
  6. 深度学习入门课程推荐
  7. Science | 基于算法设计疫苗的人工蛋白
  8. android高级组件,Android高级组件ImageSwitcher图像切换器使用方法详解
  9. Bioinformatics:吉林大学刘富组-深度学习从宏基因组序列中识别短病毒序列Virtifier...
  10. Microbiome:使用16S rRNA基因数据集实现种水平的分类