数组是一种可以容纳多维数据的数据结构。在 R 中,数组是可以容纳两个或两个以上维度数据的对象。例如,方阵可以包含两行两列,维度也可以取到五。数组只能存储同一数据类型的值。数据可以是多维的,即包含若干长度的行、列和维度。
创建数组
array() 函数用于创建数组,它在参数中接收一个向量(数字)以及维度('dim')。
下面我们来看一个示例,创建名为“array1”和“array2”的两个向量。
vector1 = c ( 5 , 10 , 15 , 20 )
vector2 = c ( 25 , 30 , 35 , 40 , 45 , 50 , 55 , 60 )
技术支持
您可以将上面的两个向量作为数组的输入,其中维度设为 4 * 4,并创建出两个矩阵或维度数据。
final = array ( c ( array1, array2) , dim = c( 4 , 4 , 3 ) )
print ( final)
技术支持
上述代码的输出如下:
, , 1
[ , 1 ] [ , 2 ] [ , 3 ] [ , 4 ]
[ 1 , ] 5 25 45 5
[ 2 , ] 10 30 50 10
[ 3 , ] 15 35 55 15
[ 4 , ] 20 40 60 20
, , 2
[ , 1 ] [ , 2 ] [ , 3 ] [ , 4 ]
[ 1 , ] 25 45 5 25
[ 2 , ] 30 50 10 30
[ 3 , ] 35 55 15 35
[ 4 , ] 40 60 20 40
, , 3
[ , 1 ] [ , 2 ] [ , 3 ] [ , 4 ]
[ 1 , ] 45 5 25 45
[ 2 , ] 50 10 30 50
[ 3 , ] 55 15 35 55
[ 4 , ] 60 20 40 60 技术支持
我们使用 "matrix.names" 将数组重命名为 "Arr1" 和 "Arr2"。另外,将行名改为 ("row1","row2"),列名改为 ("column1","column2","column3")。矩阵的维度为 2 行 3 列。
array1 = c ( 9 , 18 )
array2 = c ( 27 , 36 )
r. names = c ( "column1" , "column2" , "column3" )
c. names = c ( "row1" , "row2" )
m. names = c ( "Arr1" , "Arr2" )
final = array ( c ( array1, array2) , dim= c ( 2 , 3 , 2 ) , dimnames= list ( c. names, r. names, m. names) )
print ( final)
技术支持
上述代码的输出如下,其中有两行三列。此外,当某一列的取值用完后会重复填充:
, , Arr1
column1 column2 column3
row1 9 27 9
row2 18 36 18
, , Arr2
column1 column2 column3
row1 27 9 27
row2 36 18 36 技术支持
数组中的索引
数组以多维形式包含元素,可对每个元素进行访问操作。可以使用“[]”进行索引,其中类矩阵的数组包含行与列,索引方式为:mat[row, column]
下面举例说明:数组包含从 1 到 9 的向量输入。只有三行三列,数值覆盖 1 到 9。'c.names)' 是新的列名,对应向量('c1'、'c2'、'c3'),而 'r.names' 是新的行名('r1'、'r2'、'r3'),同样是向量。
a1= c ( 1 , 2 , 3 , 4 )
a2= c ( 5 , 6 , 7 , 8 , 9 )
r. names = c ( "c1" , "c2" , "c3" )
c. names = c ( "r1" , "r2" , "r3" )
m. names = c ( "first" )
arr = array ( c ( a1, a2) , dim= c ( 3 , 3 , 1 ) , dimnames= list ( c. names, r. names, m. names) )
print ( arr)
技术支持
, , first
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9 技术支持
上述代码的输出如下:
, , first
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9 技术支持
可以看到,1 到 9 的矩阵以 3 3(行 列)的形式生成,同时行名与列名也已更新。
接下来看看如何提取数组中的元素。
从上述数组 'arr' 中提取数字“7”。
arr[ 1 , 3 , 1 ]
技术支持
7
以上代码的输出为 7。在 'arr[1,3,1]' 中,行 1、列 3,1 表示第一层数组 'arr' 被提取。
要访问 1,'arr[1,1,1]' 表示行 1、列 1,1 表示第一层数组 'arr' 被提取。
arr[ 1 , 1 , 1 ]
技术支持
1
以上代码的输出为 1。
若要一次访问多个值,需要指定所需的范围。
arr[ 1 : 2 , 1 : 2 , 1 ]
技术支持
上述代码的输出如下,提取了包含 2 行、2 列的值,其中 1 表示提取第一层数组 'arr':
c1 c2
r1 1 4
r2 2 5 技术支持
您可以使用以下语法访问整个数组 'arr',其中 'arr[ , ,1]' 表示包含所有行与所有列(用逗号和空格分隔),1 表示要提取第一层数组 'arr'。
arr[ , , 1 ]
技术支持
上述代码的输出如下,包含了所有元素:
c1 c2 c3
r1 1 4 7
r2 2 5 8
r3 3 6 9 技术支持
您可以使用下面的代码获取整行第二行,其中 arr[2, ,1] 提取带空位的第二行,1 表示要提取的 'arr'。
arr[ 2 , , 1 ]
技术支持
c1
2
c2
5
c3
8
上述代码给出如下输出,同时打印 c1、c2、c3。
c1 2
c2 5
c3 8 技术支持
您可以使用下面的代码获取整列第二列,其中 arr[,2,1] 中的 2 表示第二列,1 表示要提取的 'arr'。
mat[ , 2 , 1 ]
技术支持
r1
4
r2
5
r3
6
上述代码给出如下输出,同时打印 r1、r2、r3。
r1 4
r2 5
r3 6 技术支持
矩阵的创建与相加
从 'arr[ , ,1]' 创建名为 mat1 和 mat2 的矩阵,即将 'arr' 的整行整列复制出来。
mat1 = arr[ , , 1 ]
mat2 = arr[ , , 1 ]
技术支持
c1 c2 c3
r1 2 8 14
r2 4 10 16
r3 6 12 18 技术支持
将两个矩阵 'mat1' 与 'mat2' 相加,并将结果存入 final,同时打印输出。
final < - mat1+ mat2
print ( final)
技术支持
下面的输出显示 mat1 与 mat2 的各行各列对应相加。
c1 c2 c3
r1 2 8 14
r2 4 10 16
r3 6 12 18 技术支持
apply()
“apply()” 属于 R 包 家族之一,包含多个函数,可帮助更轻松高效地编写代码。下面的示例展示了如何按列计算两个数组的和。
apply() 的语法为:apply(x, margin, function)
上述参数说明:x :数组或作为矩阵的二维数据。margin :指示要应用函数的维度,c(1) 表示按行,c(2) 表示按列,c(1,2) 表示同时按行与列。function:指要应用于给定数据的 R 内置或用户自定义函数。
使用下面的代码创建长度为三的向量“array1”和长度为六的向量“array2”。
array1 = c( 5 , 10 , 15 )
array2 = c( 15 , 20 , 25 , 30 , 35 , 40 )
技术支持
如下所示,'array()' 接收名为 'array1' 和 'array2' 的两个向量,维度为 3 行、3 列,并创建出 2 个矩阵,存入 'my. Array'。
my. Array < - array( c( array1, array2) , dim = c( 3 , 3 , 2 ) )
print ( my. Array)
技术支持
, , 1
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 5 15 30
[ 2 , ] 10 20 35
[ 3 , ] 15 25 40
, , 2
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 5 15 30
[ 2 , ] 10 20 35
[ 3 , ] 15 25 40 技术支持
上述代码产生如下输出,即创建了两个 3 3(行 列)的矩阵。
, , 1
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 5 15 30
[ 2 , ] 10 20 35
[ 3 , ] 15 25 40
, , 2
[ , 1 ] [ , 2 ] [ , 3 ]
[ 1 , ] 5 15 30
[ 2 , ] 10 20 35
[ 3 , ] 15 25 40 技术支持
下面使用 'apply()' 按列计算这两个矩阵的和。
final < - apply ( my. Array, c( 2 ) , sum )
print ( final)
技术支持
[ 1 ] 60 120 210 技术支持
可以看到,这里 margin 使用 c(2),即对 'my. Array' 中矩阵的元素按列求和,得到以下输出。
60 120 210 技术支持
最后,下面使用 'apply()' 按行计算这两个矩阵的和。
final < - apply ( my. Array, c( 1 ) , sum )
print ( final)
技术支持
[ 1 ] 100 130 160 技术支持
可以看到,这里 margin 使用 c(1),即对 'my. Array' 中矩阵的元素按行求和,得到以下输出。
100 130 160 技术支持
恭喜
恭喜您,已完成本教程的全部内容!
您已经了解了 R 的数组,包括其创建方式、数组索引示例,以及矩阵 的创建与相加,还有 apply() 函数 。
如果您想进一步学习 R,请参加 DataCamp 的R 入门课程 。
参考资料: R-Arrays R Array Function and Create Array in R
数组是一种可以容纳多维数据的数据结构。在 R 中,数组是可以容纳两个或两个以上维度数据的对象。例如,方阵可以包含两行两列,维度也可以取到五。数组只能存储同一数据类型的值。数据可以是多维的,即包含若干长度的行、列和维度。
创建数组
array() 函数用于创建数组,它在参数中接收一个向量(数字)以及维度('dim')。
下面我们来看一个示例,创建名为“array1”和“array2”的两个向量。
您可以将上面的两个向量作为数组的输入,其中维度设为 4 * 4,并创建出两个矩阵或维度数据。
上述代码的输出如下:
我们使用 "matrix.names" 将数组重命名为 "Arr1" 和 "Arr2"。另外,将行名改为 ("row1","row2"),列名改为 ("column1","column2","column3")。矩阵的维度为 2 行 3 列。
上述代码的输出如下,其中有两行三列。此外,当某一列的取值用完后会重复填充:
数组中的索引
数组以多维形式包含元素,可对每个元素进行访问操作。可以使用“[]”进行索引,其中类矩阵的数组包含行与列,索引方式为:
mat[row, column]下面举例说明:数组包含从 1 到 9 的向量输入。只有三行三列,数值覆盖 1 到 9。'c.names)' 是新的列名,对应向量('c1'、'c2'、'c3'),而 'r.names' 是新的行名('r1'、'r2'、'r3'),同样是向量。
上述代码的输出如下:
可以看到,1 到 9 的矩阵以 3 3(行 列)的形式生成,同时行名与列名也已更新。
接下来看看如何提取数组中的元素。
7
以上代码的输出为 7。在 'arr[1,3,1]' 中,行 1、列 3,1 表示第一层数组 'arr' 被提取。
1
以上代码的输出为 1。
上述代码的输出如下,提取了包含 2 行、2 列的值,其中 1 表示提取第一层数组 'arr':
上述代码的输出如下,包含了所有元素:
上述代码给出如下输出,同时打印 c1、c2、c3。
上述代码给出如下输出,同时打印 r1、r2、r3。
矩阵的创建与相加
从 'arr[ , ,1]' 创建名为 mat1 和 mat2 的矩阵,即将 'arr' 的整行整列复制出来。
将两个矩阵 'mat1' 与 'mat2' 相加,并将结果存入 final,同时打印输出。
下面的输出显示 mat1 与 mat2 的各行各列对应相加。
apply()
“apply()” 属于 R 包 家族之一,包含多个函数,可帮助更轻松高效地编写代码。下面的示例展示了如何按列计算两个数组的和。
apply() 的语法为:
apply(x, margin, function)上述参数说明:
x:数组或作为矩阵的二维数据。
margin:指示要应用函数的维度,c(1) 表示按行,c(2) 表示按列,c(1,2) 表示同时按行与列。
function:指要应用于给定数据的 R 内置或用户自定义函数。
使用下面的代码创建长度为三的向量“array1”和长度为六的向量“array2”。
如下所示,'array()' 接收名为 'array1' 和 'array2' 的两个向量,维度为 3 行、3 列,并创建出 2 个矩阵,存入 'my. Array'。
上述代码产生如下输出,即创建了两个 3 3(行 列)的矩阵。
下面使用 'apply()' 按列计算这两个矩阵的和。
可以看到,这里 margin 使用 c(2),即对 'my. Array' 中矩阵的元素按列求和,得到以下输出。
最后,下面使用 'apply()' 按行计算这两个矩阵的和。
可以看到,这里 margin 使用 c(1),即对 'my. Array' 中矩阵的元素按行求和,得到以下输出。
恭喜
恭喜您,已完成本教程的全部内容!
您已经了解了 R 的数组,包括其创建方式、数组索引示例,以及矩阵的创建与相加,还有 apply() 函数。
如果您想进一步学习 R,请参加 DataCamp 的R 入门课程。
参考资料:
R-Arrays
R Array Function and Create Array in R