R语言 数组操作
数组是R的数据对象,它以两个以上的维度存储数据。数组是n维的数据结构。例如,如果我们创建一个维度为(2,3,3)的数组,那么它将创建3个矩形矩阵,每个矩阵有2行和3列。它们是同质的数据结构。
现在,让我们看看如何在R中创建数组。要在R中创建一个数组,你需要使用名为array()的函数。这个array()的参数是向量中的元素集合,你必须传递一个包含数组尺寸的向量。
Array_NAME <- array(data, dim = (row_Size, column_Size, matrices, dimnames)
其中 。
data - 给予数组的输入向量。
matrices - 由多维矩阵组成。
row_Size - 数组可存储的行元素数量。
column_Size - 数组可存储的列元素数量。
dimnames - 用于根据用户的偏好改变行和列的默认名称。
例如
# Create the vectors with different length
vector1 <- c(1, 2, 3)
vector2 <- c(10, 15, 3, 11, 16, 12)
# taking this vector as input
result <- array(c(vector1, vector2), dim = c(3, 3, 2))
print(result)
输出
, , 1
[,1] [,2] [,3]
[1,] 1 10 11
[2,] 2 15 16
[3,] 3 3 12
, , 2
[,1] [,2] [,3]
[1,] 1 10 11
[2,] 2 15 16
[3,] 3 3 12
对数组的操作
命名列和行
我们可以用dimnames给行和列命名。
例子
# Creating Vectors
vector1 <- c(1, 2, 3)
vector2 <- c(10, 15, 3, 11, 16, 12)
# Giving Names to rows and columns
column.names <- c("COLUMN1", "COLUMN2", "COLUMN3")
row.names <- c("ROW1", "ROW2", "ROW3")
matrix.names <- c("Matrix.NO1", "Matrix.NO2")
# taking this vector as input
result <- array(c(vector1, vector2), dim = c(3, 3, 2),
dimnames = list(row.names, column.names, matrix.names))
print(result)
输出
, , Matrix.NO1
COLUMN1 COLUMN2 COLUMN3
ROW1 1 10 11
ROW2 2 15 16
ROW3 3 3 12
, , Matrix.NO2
COLUMN1 COLUMN2 COLUMN3
ROW1 1 10 11
ROW2 2 15 16
ROW3 3 3 12
操纵数组元素
数组是由多个维度组成的,操作是通过访问元素来进行的。
例子
# creating two vectors of different length
# and taking vector as input
vector1 <- c(1, 2, 3)
vector2 <- c(4, 6, 8, 0, 2, 4)
array1 <- array(c(vector1, vector2), dim = c(3, 3, 2))
# creating other array
vector3 <- c(3, 2, 1)
vector4 <- c(2, 4, 6, 8, 3, 5)
array2 <- array(c(vector3, vector4), dim = c(3, 3, 2))
# create matrices and add them
matrix1 <- array1[,,2]
matrix2 <- array2[,,2]
result <- matrix1 + matrix2
print(result)
输出
[,1] [,2] [,3]
[1,] 4 6 8
[2,] 4 10 5
[3,] 4 14 9
访问阵列元素
使用矩阵中的索引位置可以很容易地访问任何元素。此外,我们还可以使用索引位置改变/更改数组中的元素。
语法
Array_Name[row_position, Column_Position, Matrix_Level]
例子
# Creating Vectors
vector1 <- c(1, 2, 3)
vector2 <- c(10, 15, 3, 11, 16, 12)
column.names <- c("COLUMN1", "COLUMN2", "COLUMN3")
row.names <- c("ROW1", "ROW2", "ROW3")
matrix.names <- c("Matrix.NO1", "Matrix.NO2")
# taking vector as input
result <- array(c(vector1, vector2), dim = c(3, 3, 2),
dimnames = list(row.names, column.names, matrix.names))
print(result)
# print third row of second matrix
print(result[3,,2])
输出
, , Matrix.NO1
COLUMN1 COLUMN2 COLUMN3
ROW1 1 10 11
ROW2 2 15 16
ROW3 3 3 12
, , Matrix.NO2
COLUMN1 COLUMN2 COLUMN3
ROW1 1 10 11
ROW2 2 15 16
ROW3 3 3 12
COLUMN1 COLUMN2 COLUMN3
3 3 12
跨数组元素的计算
apply()函数用于跨数组元素的计算。
语法
apply(x, margin, fun)
其中,
x - 一个数组。
margin - 使用的数据集的名称。
fun - 应用于数组元素的函数。
例子
# create two vectors and take them as input in array
vector1 <- c(3, 2, 1)
vector2 <- c(2, 4, 6, 8, 0, 1)
new.array <- array(c(vector1, vector2), dim = c(3, 3, 2))
print(new.array)
# using apply and calculate the sum of rows in matrices
result <- apply(new.array, c(1), sum)
print(result)
输出
, , 1
[,1] [,2] [,3]
[1,] 3 2 8
[2,] 2 4 0
[3,] 1 6 1
, , 2
[,1] [,2] [,3]
[1,] 3 2 8
[2,] 2 4 0
[3,] 1 6 1
[1] 26 12 16