R语言数组 #
一、数组概述 #
数组(Array)是R语言中的多维数据结构,可以看作是矩阵的扩展。矩阵是二维数组,数组可以有一维、二维、三维或更多维度。
二、创建数组 #
2.1 使用array函数 #
r
arr <- array(1:24, dim = c(4, 6))
print(arr)
arr <- array(1:24, dim = c(3, 4, 2))
print(arr)
2.2 指定维度名称 #
r
arr <- array(1:24, dim = c(3, 4, 2),
dimnames = list(
c("行1", "行2", "行3"),
c("列1", "列2", "列3", "列4"),
c("层1", "层2")
))
print(arr)
2.3 从向量创建 #
r
x <- 1:24
arr <- array(x, dim = c(2, 3, 4))
print(arr)
2.4 创建空数组 #
r
arr <- array(dim = c(2, 3, 2))
print(arr)
arr <- array(0, dim = c(2, 3, 2))
print(arr)
三、数组属性 #
3.1 维度 #
r
arr <- array(1:24, dim = c(2, 3, 4))
dim(arr)
length(dim(arr))
3.2 长度 #
r
arr <- array(1:24, dim = c(2, 3, 4))
length(arr)
prod(dim(arr))
3.3 类型 #
r
arr <- array(1:24, dim = c(2, 3, 4))
class(arr)
typeof(arr)
mode(arr)
3.4 维度名称 #
r
arr <- array(1:24, dim = c(2, 3, 4),
dimnames = list(
c("A", "B"),
c("X", "Y", "Z"),
c("L1", "L2", "L3", "L4")
))
dimnames(arr)
rownames(arr)
colnames(arr)
四、数组索引 #
4.1 位置索引 #
r
arr <- array(1:24, dim = c(2, 3, 4))
arr[1, 2, 3]
arr[2, 1, 1]
arr[1, 1, 1]
4.2 切片索引 #
r
arr <- array(1:24, dim = c(2, 3, 4))
arr[1, , ]
arr[, 2, ]
arr[, , 3]
4.3 多维切片 #
r
arr <- array(1:24, dim = c(2, 3, 4))
arr[1, 2, ]
arr[1, , 3]
arr[, 2, 3]
4.4 名称索引 #
r
arr <- array(1:24, dim = c(2, 3, 4),
dimnames = list(
c("A", "B"),
c("X", "Y", "Z"),
c("L1", "L2", "L3", "L4")
))
arr["A", "Y", "L2"]
arr["A", , ]
arr[, "X", "L1"]
4.5 逻辑索引 #
r
arr <- array(1:24, dim = c(2, 3, 4))
arr[arr > 20]
arr[arr %% 2 == 0]
五、数组运算 #
5.1 算术运算 #
r
arr1 <- array(1:8, dim = c(2, 2, 2))
arr2 <- array(9:16, dim = c(2, 2, 2))
arr1 + arr2
arr1 - arr2
arr1 * arr2
arr1 / arr2
5.2 与标量运算 #
r
arr <- array(1:8, dim = c(2, 2, 2))
arr + 10
arr * 2
arr ^ 2
5.3 统计函数 #
r
arr <- array(1:24, dim = c(2, 3, 4))
sum(arr)
mean(arr)
max(arr)
min(arr)
sd(arr)
var(arr)
六、apply函数 #
6.1 基本用法 #
r
arr <- array(1:24, dim = c(2, 3, 4))
apply(arr, 1, sum)
apply(arr, 2, sum)
apply(arr, 3, sum)
6.2 多维度应用 #
r
arr <- array(1:24, dim = c(2, 3, 4))
apply(arr, c(1, 2), sum)
apply(arr, c(1, 3), mean)
apply(arr, c(2, 3), max)
6.3 自定义函数 #
r
arr <- array(1:24, dim = c(2, 3, 4))
apply(arr, 1, function(x) sum(x^2))
apply(arr, 2, function(x) mean(x) + sd(x))
七、数组修改 #
7.1 修改元素 #
r
arr <- array(1:24, dim = c(2, 3, 4))
arr[1, 1, 1] <- 100
print(arr)
7.2 修改切片 #
r
arr <- array(1:24, dim = c(2, 3, 4))
arr[1, , ] <- 0
print(arr)
arr[, , 1] <- matrix(100:105, nrow = 2)
print(arr)
7.3 修改维度 #
r
arr <- array(1:24, dim = c(2, 3, 4))
dim(arr) <- c(4, 6)
print(arr)
dim(arr) <- c(2, 2, 2, 3)
print(arr)
八、数组转换 #
8.1 数组转向量 #
r
arr <- array(1:24, dim = c(2, 3, 4))
as.vector(arr)
c(arr)
8.2 数组转矩阵 #
r
arr <- array(1:24, dim = c(2, 3, 4))
matrix(arr, nrow = 8)
matrix(arr, ncol = 6)
8.3 向量转数组 #
r
x <- 1:24
array(x, dim = c(2, 3, 4))
8.4 矩阵转数组 #
r
m <- matrix(1:12, nrow = 3)
array(m, dim = c(3, 4, 2))
九、特殊数组 #
9.1 一维数组(向量) #
r
arr <- array(1:5, dim = 5)
print(arr)
class(arr)
9.2 二维数组(矩阵) #
r
arr <- array(1:6, dim = c(2, 3))
print(arr)
class(arr)
9.3 全零数组 #
r
arr <- array(0, dim = c(2, 3, 2))
print(arr)
9.4 全一数组 #
r
arr <- array(1, dim = c(2, 3, 2))
print(arr)
9.5 随机数组 #
r
arr <- array(runif(24), dim = c(2, 3, 4))
print(arr)
arr <- array(rnorm(24), dim = c(2, 3, 4))
print(arr)
十、数组拼接 #
10.1 使用abind包 #
r
install.packages("abind")
library(abind)
arr1 <- array(1:8, dim = c(2, 2, 2))
arr2 <- array(9:16, dim = c(2, 2, 2))
abind(arr1, arr2, along = 1)
abind(arr1, arr2, along = 2)
abind(arr1, arr2, along = 3)
10.2 手动拼接 #
r
arr1 <- array(1:8, dim = c(2, 2, 2))
arr2 <- array(9:16, dim = c(2, 2, 2))
arr3 <- array(c(arr1, arr2), dim = c(2, 2, 4))
print(arr3)
十一、实践示例 #
11.1 图像数据处理 #
r
img <- array(runif(100*100*3), dim = c(100, 100, 3))
red_channel <- img[, , 1]
green_channel <- img[, , 2]
blue_channel <- img[, , 3]
img[, , 1] <- img[, , 1] * 1.2
11.2 时间序列数据 #
r
data <- array(rnorm(365*24*4), dim = c(365, 24, 4),
dimnames = list(
paste0("Day", 1:365),
paste0("Hour", 1:24),
c("Temp", "Humidity", "Pressure", "Wind")
))
daily_avg <- apply(data, c(1, 3), mean)
print(daily_avg[1:5, ])
11.3 三维数据可视化 #
r
arr <- array(1:27, dim = c(3, 3, 3))
for (i in 1:3) {
cat("第", i, "层:\n")
print(arr[, , i])
cat("\n")
}
十二、总结 #
本章学习了:
- 数组的创建方法
- 数组属性:维度、长度、类型
- 数组索引和切片
- 数组运算
- apply函数在数组上的应用
- 数组修改和转换
- 特殊数组的创建
- 数组拼接
数组是处理多维数据的重要工具,在图像处理、时间序列分析等领域有广泛应用!
最后更新:2026-03-27