10-R数组

R 数组

数组也是 R 语言的对象,R 语言可以创建一维或多维数组。

R 语言数组是一个同一类型的集合,前面我们学的矩阵 matrix 其实就是一个二维数组。

向量、矩阵、数组关系可以看下图:

R 语言数组创建使用 array() 函数,该函数使用向量作为输入参数,可以使用 dim 设置数组维度。

array() 函数语法格式如下:

复制代码
array(data = NA, dim = length(data), dimnames = NULL)

参数说明:

  • data - 指定数组的数据源,可以是一个向量、矩阵或列表。
  • dim - 指定数组的维度,可以是一个整数向量或一个表示维度的元组,默认是一维数组。例如,dim = c(2, 3, 4) 表示创建一个 2x3x4 的三维数组。
  • dimnames - 可选参数,用于指定数组每个维度的名称,可以是一个包含维度名称的列表。

在 R 中,数组索引是从 1 开始的,与其他编程语言的习惯有所不同。

此外,R 还提供了丰富的函数和操作符用于处理数组数据,如索引、切片、重塑、聚合等。

在 R 中,可以使用**矩阵(Matrix)列表(List)**来表示多维数组。

**矩阵(Matrix):**矩阵是 R 中最常用的表示数组的形式,它是一个二维的结构,具有固定的行数和列数。

可以使用 matrix() 函数创建矩阵,指定数据元素和维度。

实例:

R 复制代码
# 创建一个3x3的矩阵
my_matrix <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, ncol = 3)
print(my_matrix)

执行以上代码输出结果为:

复制代码
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

列表(List):列表是 R 中更通用的多维数组形式,它可以包含不同类型的元素,并且每个元素可以是一个矩阵、向量或其他数据结构。

实例:

R 复制代码
# 创建一个包含矩阵和向量的列表
my_list <- list(matrix(c(1, 2, 3, 4), nrow = 2), c(5, 6, 7))
print(my_list)

执行以上代码输出结果为:

复制代码
[[1]]
     [,1] [,2]
[1,]    1    3
[2,]    2    4

[[2]]
[1] 5 6 7

除了矩阵和列表,R 还提供了其他数据结构来表示多维数组,如数组(Array)和数据帧(Data Frame)。

下面是一些示例来演示 array() 函数的使用:

使用向量创建一维数组:

实例:

复制代码
my_vector <- c(1, 2, 3, 4)
my_array <- array(my_vector, dim = c(4))
print(my_array)

执行以上代码输出结果为:

复制代码
[1] 1 2 3 4

以下实例我们创建一个 3 行 3 列的的二维数组:

实例:

R 复制代码
# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 创建数组
result <- array(c(vector1,vector2),dim = c(3,3,2))
print(result)

执行以上代码输出结果为:

复制代码
, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

使用 dimnames 参数来设置各个维度的名称::

实例:

R 复制代码
# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 创建数组,并设置各个维度的名称
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names,column.names,matrix.names))
print(result)

执行以上代码输出结果为:

复制代码
, , Matrix1

     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

, , Matrix2

     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

访问数组元素

在 R 语言中,可以使用索引操作符 [ ] 来访问多维数组的元素。

索引操作符允许您按照指定的索引位置获取数组中的特定元素。

如果想获取数组元素,可以通过使用元素的列索引和行索引,类似坐标形式。

访问单个元素:

实例:

R 复制代码
my_array <- array(1:12, dim = c(2, 3, 2))  # 创建一个3维数组

element <- my_array[2,1, 2]  # 访问第一个维度为2,第二个维度为1,第三个维度为2的元素
print(my_array)
print(element)

执行以上代码输出结果为:

复制代码
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

[1] 8

访问多个元素:

实例:

复制代码
my_array <- array(1:12, dim = c(2, 3, 2))  # 创建一个3维数组
elements <- my_array[c(1, 2), c(2, 3), c(1, 2)]  # 访问多个元素,其中每个维度的索引分别为1和2
print(my_array)
print(elements)

执行以上代码输出结果为:

复制代码
, , 1

     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

, , 2

     [,1] [,2] [,3]
[1,]    7    9   11
[2,]    8   10   12

, , 1

     [,1] [,2]
[1,]    3    5
[2,]    4    6

, , 2

     [,1] [,2]
[1,]    9   11
[2,]   10   12

访问二维数组的元素:

实例:

R 复制代码
# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)
column.names <- c("COL1","COL2","COL3")
row.names <- c("ROW1","ROW2","ROW3")
matrix.names <- c("Matrix1","Matrix2")

# 创建数组
result <- array(c(vector1,vector2),dim = c(3,3,2),dimnames = list(row.names, column.names, matrix.names))

# 显示数组第二个矩阵中第三行的元素
print(result[3,,2])

# 显示数组第一个矩阵中第一行第三列的元素
print(result[1,3,1])

# 输出第二个矩阵
print(result[,,2])

执行以上代码输出结果为:

复制代码
COL1 COL2 COL3 
   3   12   15 
[1] 13
     COL1 COL2 COL3
ROW1    5   10   13
ROW2    9   11   14
ROW3    3   12   15

使用逻辑条件进行筛选:

实例:

R 复制代码
my_array <- array(1:12, dim = c(2, 3, 2))  # 创建一个3维数组
filtered_elements <- my_array[my_array > 5]  # 选择大于5的元素
print(filtered_elements)  # 输出:6 7 8 9 10 11 12

操作数组元素

由于数组是由多个维度的矩阵组成,所以我们可以通过访问矩阵的元素来访问数组元素。

实例:

R 复制代码
# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 创建数组
array1 <- array(c(vector1,vector2),dim = c(3,3,2))

# 创建两个不同长度的向量
vector3 <- c(9,1,0)
vector4 <- c(6,0,11,3,14,1,2,6,9)
array2 <- array(c(vector3,vector4),dim = c(3,3,2))

# 从数组中创建矩阵
matrix1 <- array1[,,2]
matrix2 <- array2[,,2]

# 矩阵相加
result <- matrix1+matrix2
print(result)

执行以上代码输出结果为:

复制代码
     [,1] [,2] [,3]
[1,]    7   19   19
[2,]   15   12   14
[3,]   12   12   26

另外我们可以使用 apply() 元素对数组元素进行跨维度计算,语法格式如下:

复制代码
apply(X, MARGIN, FUN, ...)

参数说明:

  • X:要应用函数的数组或矩阵。
  • MARGIN:指定应用函数的维度,可以是1表示行,2表示列,或者c(1, 2)表示同时应用于行和列。
  • FUN:要应用的函数,可以是内置函数(如meansum等)或自定义函数。
  • ...:可选参数,用于传递给函数的其他参数。

以下我们使用 apply() 函数来计算数组两个矩阵中每一行对数字之和。

实例:

R 复制代码
# 创建两个不同长度的向量
vector1 <- c(5,9,3)
vector2 <- c(10,11,12,13,14,15)

# 创建数组
new.array <- array(c(vector1,vector2),dim = c(3,3,2))
print(new.array)

# 计算数组中所有矩阵第一行的数字之和
result <- apply(new.array, c(1), sum)
print(result)

执行以上代码输出结果为:

复制代码
, , 1

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

, , 2

     [,1] [,2] [,3]
[1,]    5   10   13
[2,]    9   11   14
[3,]    3   12   15

[1] 56 68 60

对矩阵的行或列应用内置函数:

实例:

R 复制代码
# 创建一个3x3的矩阵
my_matrix <- matrix(1:9, nrow = 3)
# 对每列应用sum函数
col_sums <- apply(my_matrix, 2, sum)
print(col_sums)

执行以上代码输出结果为:

复制代码
[1]  6 15 24

对矩阵的行或列应用自定义函数:

实例:

R 复制代码
# 创建一个3x3的矩阵
my_matrix <- matrix(1:9, nrow = 3)
# 自定义函数:计算每行的平均值
row_mean <- function(x) {
  return(mean(x))
}
# 对每行应用row_mean函数
row_means <- apply(my_matrix, 1, row_mean)
print(row_means)

执行以上代码输出结果为:

复制代码
[1] 4 5 6

对数组的多个维度同时应用函数:

实例:

R 复制代码
# 创建一个3维数组
my_array <- array(1:12, dim = c(2, 3, 2))
# 对第一个和第三个维度同时应用mean函数
result <- apply(my_array, c(1, 3), mean)
print(result)

执行以上代码输出结果为:

复制代码
     [,1] [,2]
[1,]    3    9
[2,]    4   10
函数:计算每行的平均值
row_mean <- function(x) {
  return(mean(x))
}
# 对每行应用row_mean函数
row_means <- apply(my_matrix, 1, row_mean)
print(row_means)

执行以上代码输出结果为:

复制代码
[1] 4 5 6

对数组的多个维度同时应用函数:

实例:

R 复制代码
# 创建一个3维数组
my_array <- array(1:12, dim = c(2, 3, 2))
# 对第一个和第三个维度同时应用mean函数
result <- apply(my_array, c(1, 3), mean)
print(result)

执行以上代码输出结果为:

复制代码
     [,1] [,2]
[1,]    3    9
[2,]    4   10
相关推荐
HEX9CF14 分钟前
【Linux】awk 命令详解及使用示例:结构化文本数据处理工具
linux·chrome·算法
Cl_rown去掉l变成C28 分钟前
第J3-1周:DenseNet算法 实现乳腺癌识别
人工智能·pytorch·算法
努力学习的小廉28 分钟前
我爱学算法之—— 前缀和(中)
开发语言·redis·算法
保持学习ing30 分钟前
黑马Java面试笔记之 集合篇(算法复杂度+ArrayList+LinkedList)
java·笔记·算法·面试
面朝大海,春不暖,花不开30 分钟前
Python 文件操作与输入输出:从基础到高级应用
windows·python·microsoft
LunaGeeking34 分钟前
三分算法与DeepSeek辅助证明是单峰函数
c语言·c++·算法·编程·信奥赛·ai辅助学习·三分
AI视觉网奇1 小时前
pycharm F2 修改文件名 修改快捷键
ide·python·pycharm
酷爱码1 小时前
Java -jar命令运行外部依赖JAR包的深度场景分析与实践指南
java·python·jar
WilliamCHW1 小时前
Pycharm 配置解释器
ide·python·pycharm
abments1 小时前
基于ReAction范式的问答系统实现demo
开发语言·python