R语言矩阵
- R语言中的矩阵定义和创建:矩阵是R语言中的一种二维数据结构,用于存储数据,可通过
matrix()
函数创建。 - 访问和修改矩阵元素:使用索引
[n1, n2]
访问和修改矩阵的特定元素,其中n1
和n2
分别表示行和列的位置。 - 组合和检查矩阵中的元素:可使用
cbind()
和rbind()
函数将矩阵按列或行组合,%in%
操作符用于检查特定元素是否存在于矩阵中。
矩阵是一种二维数据结构,其中数据被排列成行和列。例如,
这里,上面的矩阵是 3 * 3(读作“三乘三”)矩阵,因为它有 3 行和 3 列。
在 R 中创建矩阵
在 R 中,我们使用 matrix()
函数来创建矩阵。
matrix()
函数的语法为
matrix(vector, nrow, ncol)
这里,
vector
- 相同类型的数据项nrow
- 行数ncol
- 列数byrow
(可选) - 如果为TRUE
,则矩阵按行填充。默认情况下,矩阵按列填充。
让我们看一个例子,
# 创建一个 2 行 3 列的矩阵
matrix1 <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)
print(matrix1)
输出
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
在上面的例子中,我们使用 matrix()
函数创建了一个名为 matrix1
的矩阵。
matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3, byrow = TRUE)
这里,我们传递了整数类型的数据项,并使用 c()
将数据项组合在一起。并且 nrow = 2
和 ncol = 3
表示矩阵有 2 行和 3 列。
由于我们传递了 byrow = TRUE
,所以矩阵中的数据项按行填充。如果我们没有传递 byrow
参数,如
matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
输出将是
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
在 R 中访问矩阵元素
我们使用向量索引操作符 [ ]
来访问 R 中矩阵的特定元素。
访问矩阵元素的语法是
matrix[n1, n2]
这里,
n1
- 指定行位置n2
- 指定列位置
让我们看一个例子,
matrix1 <- matrix(c("Sabby", "Cathy", "Larry", "Harry"), nrow = 2, ncol = 2)
print(matrix1)
# 访问第 1 行第 2 列的元素
cat("\n想要的元素:", matrix1[1, 2])
输出
[,1] [,2]
[1,] "Sabby" "Larry"
[2,] "Cathy" "Harry"
想要的元素: Larry
在上面的示例中,我们创建了一个名为 matrix1
的 2 行 2 列的矩阵,其中 包含 4 个字符串类型的数据。注意索引运算符 []
的使用,
matrix1[1, 2]
这里,[1, 2]
指定我们正在尝试访问第 1 行第 2 列的元素,即 "Larry"
。
访问整行或整列
在 R 中,我们也可以根据 []
中传递的值访问整行或整列。
[n, ]
- 返回第 n 行的所有元素。[ ,n]
- 返回第 n 列的所有元素。
例如,
matrix1 <- matrix(c("Sabby", "Cathy", "Larry", "Harry"), nrow = 2, ncol = 2)
print(matrix1)
# 访问第 1 行的所有元素
cat("\n第 1 行:", matrix1[1, ])
# 访问第 2 列的所有元素
cat("\n第 2 列:", matrix1[, 2])
输出
[,1] [,2]
[1,] "Sabby" "Larry"
[2,] "Cathy" "Harry"
第 1 行: Sabby Larry
第 2 列: Larry Harry
这里,
matrix1[1, ]
- 访问第 1 行的所有元素,即Sabby
和Larry
matrix1[ ,2]
- 访问第 2 列的所有元素,即Larry
和Harry
访问多个行或列
我们可以在 R 中使用 c()
函数访问多个行或列。
[c(n1,n2), ]
- 返回第 n1 行和第 n2 行的所有元素。[ ,c(n1,n2)]
- 返回第 n1 列和第 n2 列的所有元素。
例如,
# 创建 2 行 3 列的矩阵
matrix1 <- matrix(c(10, 20, 30, 40, 50, 60), nrow = 2, ncol = 3)
print(matrix1)
# 访问第 1 行和第 3 行的所有元素
cat("\n第 1 行和第 2 行:", matrix1[c(1,3), ])
# 访问第 2 列和第 3 列的所有元素
cat("\n第 2 列和第 3 列:", matrix1[ ,c(2,3)])
输出
[,1] [,2] [,3]
[1,] 10 30 50
[2,] 20 40 60
第 1 行和第 3 行: 10 20 30 40 50 60
第 2 列和第 3 列: 30 40 50 60
这里,
[c(1,3), ]
- 返回第 1 行和第 3 行的所有元素。[ ,c(2,3)]
- 返回第 2 列和第 3 列的所有元素。
在 R 中修改矩阵元素
我们使用向量索引运算符 []
来修改指定的元素。例如,
matrix1[1,2] = 140
这里,第 1 行第 2 列的元素被更改为 140。
让 我们来看一个示例,
# 创建一个 2 行 2 列的矩阵
matrix1 <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
# 打印原始矩阵
print(matrix1)
# 将第 1 行第 2 列的值改为 5
matrix1[1,2] = 5
# 打印更新后的矩阵
print(matrix1)
输出
[,1] [,2]
[1,] 1 3
[2,] 2 4
[,1] [,2]
[1,] 1 5
[2,] 2 4
在 R 中组合两个矩阵
在 R 中,我们使用 cbind()
和 rbind()
函数将两个矩阵组合在一起。
cbind()
- 通过列组合两个矩阵rbind()
- 通过行组合两个矩阵
我们希望组合的两个矩阵的行数和列数必须相等。例如,
# 创建两个 2 行 2 列的矩阵
even_numbers <- matrix(c(2, 4, 6, 8), nrow = 2, ncol = 2)
odd_numbers <- matrix(c(1, 3, 5, 7), nrow = 2, ncol = 2)
# 通过列组合两个矩阵
total1 <- cbind(even_numbers, odd_numbers)
print(total1)
# 通过行组合两个矩阵
total2 <- rbind(even_numbers, odd_numbers)
print(total2)
输出
[,1] [,2] [,3] [,4]
[1,] 2 6 1 5
[2,] 4 8 3 7
[,1] [,2]
[1,] 2 6
[2,] 4 8
[3,] 1 5
[4,] 3 7
在这里,首先我们使用了 cbind()
函数将两个矩阵:even_numbers
和 odd_numbers
按列组合。然后使用 rbind()
将两个矩阵按行组合。
在 R 矩阵中检查元素是否存在
在 R 中,我们使用 %in%
操作符来检查指定的元素是否存在于矩阵中,并返回布尔值。
TRUE
- 如果指定元素存在于矩阵中FALSE
- 如果指定元素不存在于矩阵中
例如,
matrix1 <- matrix(c("Sabby", "Cathy", "Larry", "Harry"), nrow = 2, ncol = 2)
"Larry" %in% matrix1 # TRUE
"Kinsley" %in% matrix1 # FALSE
输出
TRUE
FALSE
这里,
"Larry"
存在于matrix1
中,因此方法返回TRUE
"Kinsley"
不存在于matrix1
中,因此方法返回FALSE