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