数组也是 R 语言的对象,R 语言可以创建一维或多维数组。
R 语言数组是一个同一类型的集合,前面我们学的矩阵 matrix 其实就是一个二维数组。
向量、矩阵、数组关系可以看下图:
R 语言数组创建使用 array() 函数,该函数使用向量作为输入参数,可以使用 dim 设置数组维度。
array() 函数语法格式如下:
array(data = NA, dim = length(data), dimnames = NULL)
参数说明:
data 向量,数组元素。
dim 数组的维度,默认是一维数组。
dimnames 维度的名称,必须是个列表,默认情况下是不设置名称的。
以下实例我们创建一个 3 行 3 列的的二维数组:
# 创建两个不同长度的向量
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 参数来设置各个维度的名称::
# 创建两个不同长度的向量
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
访问数组元素
如果想获取数组元素,可以通过使用元素的列索引和行索引,类似坐标形式。
# 创建两个不同长度的向量
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
操作数组元素
由于数组是由多个维度的矩阵组成,所以我们可以通过访问矩阵的元素来访问数组元素。
# 创建两个不同长度的向量
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
(
vector1,vector2
)
,
dim
=
c
(
3
,
3
,
2
)
)
# 从数组中创建矩阵
matrix1
<-
array1
[
,,
2
]
matrix2
<-
array2
[
,,
2
]
# 矩阵相加
result
<-
matrix1
+
matrix2
print
(
result
)
执行以上代码输出结果为:
[,1] [,2] [,3]
[1,] 10 20 26
[2,] 18 22 28
[3,] 6 24 30
另外我们可以使用
apply()
元素对数组元素进行跨维度计算,语法格式如下:
apply(x, margin, fun)
参数说明:
margin
数据名称
fun
计算函数
以下我们使用 apply() 函数来计算数组两个矩阵中每一行对数字之和。
# 创建两个不同长度的向量
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