向量(Vector)
向量是用于存储数值型、字符型或逻辑型数据的一维数组。使用函数c()
即可创建向量。
创建向量
1
2
| a <- c(1, 2, 5, 7)
b <- c("a", "c")
|
值得一提的是不同其他大多数编程语言,向量的索引(Index)不是从0开始而是从1开始
向量中不能包含不同类型的值
数值型即想1、2、3、1.2、3.6这种数字;字符型(”a”, “b”,”asdf”);逻辑型(TURE/FALSE)。 下面代码虽然可以执行,但不是最佳实践
1
2
3
| # 不建议使用
a <- c(1,"2","3")
print(a) #输出:[1] "1" "2" "3"
|
矩阵(Matrix)
R语言为线性代数的研究提供了矩阵类型,这种数据结构很类似于其它语言中的二维数组,但R提供了语言级的矩阵运算支持。
创建矩阵
R 语言的矩阵可以使用 matrix()
函数来创建
1
2
3
4
5
6
7
8
9
10
11
| # 1:20等价于c(1:20)能生成一个1到20的一维数组,4行5列
y <- matrix(1:20, nrow = 5, ncol = 4)
print(y)
"""
[,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
"""
|
```R
matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
- data:向量数据
- nrow:生成多少行,默认为1
- ncol:生成多少列默认为1
- byrow: 为 FALSE 按列排列,为 TRUE 按行排列,默认为FALSE
- dimnames: 行和列的名称
1
2
3
4
5
6
7
| # byrow 为 TRUE 元素按行排列
M <- matrix(c(3:14), nrow = 4, byrow = TRUE)
print(M)
# Ebyrow 为 FALSE 元素按列排列
N <- matrix(c(3:14), nrow = 4, byrow = FALSE)
print(N)
|
输出
1
2
3
4
5
6
7
8
9
10
| [,1] [,2] [,3]
[1,] 3 4 5
[2,] 6 7 8
[3,] 9 10 11
[4,] 12 13 14
[,1] [,2] [,3]
[1,] 3 7 11
[2,] 4 8 12
[3,] 5 9 13
[4,] 6 10 14
|
矩阵下标
当涉及到矩阵下标的使用时,以下是一些使用R代码进行直接说明的示例:
访问单个元素:
1
2
3
4
5
6
7
8
9
10
| mat <- matrix(1:9, nrow = 3) # 创建一个3x3的矩阵
element <- mat[2, 3] # 访问第2行第3列的元素
print(mat)
print(element) # 输出结果: 8
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[1] 8
|
访问整列或整行:
1
2
3
4
5
6
| mat <- matrix(1:9, nrow = 3) # 创建一个3x3的矩阵
row_vector <- mat[2, ] # 访问第2行的所有列
column_vector <- mat[, 3] # 访问第3列的所有行
print(mat)
print(row_vector)
print(column_vector)
|
1
2
3
4
5
6
| [,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
[1] 2 5 8
[1] 7 8 9
|
切片操作
1
2
3
4
5
6
| mat <- matrix(1:9, nrow = 3) # 创建一个3x3的矩阵
sub_matrix <- mat[1:2, 2:3] # 访问第1行到第2行、第2列到第3列的子矩阵
print(sub_matrix) # 输出结果:
# [,1] [,2]
# [1,] 4 7
# [2,] 5 8
|
使用逻辑向量进行子集选择:
1
2
3
| mat <- matrix(1:9, nrow = 3) # 创建一个3x3的矩阵
selected_elements <- mat[mat > 5] # 选择大于5的所有元素
print(selected_elements) # 输出结果: 6 7 8 9
|
参考
[1] R语言实战 - 第三版
[2] https://www.runoob.com/r/r-data-types.html