本文概述
数组是可以保存多维数据的数据结构。在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]”行的第3列和第1行中, 提取了第一个数组” arr”。
- 要访问1, 则从第1列和第1列的” arr [1, 1, 1]”行1中提取第一个数组” arr”。
arr[1, 1, 1]
1个
上面代码的输出为1。
- 要一次访问多个值, 你需要指定所需的范围。
arr[1:2, 1:2, 1]
c1 | c2 | |
---|---|---|
11 | 1 | 4 |
22 | 2 | 5 |
上面的代码给出如下输出, 其中提取包含2行, 2列和1的值是第一个数组’arr’:
c1 c2
r1 1 4
r2 2 5
- 你可以使用以下语法访问整个数组’arr’, 其中’arr [, , 1]’指定包含所有行和列, 每个行和列均以逗号分隔, 并用空格表示。 1指定要提取的数组” arr”。
arr[ , , 1]
c1 | c2 | c3 | |
---|---|---|---|
11 | 1 | 4 | 7 |
22 | 2 | 5 | 8 |
33 | 3 | 6 | 9 |
上面的代码给出了以下所有元素存在的输出:
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]
- 11
- 4
- 22
- 5
- 33
- 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。阵列”。
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
你可以在上面看到在’my。’中矩阵的元素使用空白的c(2)的地方。将Array’按列进行求和以得到以下输出。
60 120 210
最后, 下面使用” apply()”按行计算两个矩阵的总和。
final <- apply(my.Array, c(1), sum)
print(final)
[1] 100 130 160
你可以在上面看到在’my。’中矩阵的元素使用c(1)边距的地方。按行将Array’相加得出以下输出。
100 130 160
本文总结
恭喜, 你已完成本教程的结尾!
你已经了解了R的数组及其创建, 使用示例在数组中建立索引, 矩阵的创建和添加以及apply()函数的知识。
如果你想了解有关R的更多信息, 请参加srcmini的R入门课程。
参考文献:
R数组
R数组函数和在R中创建数组
评论前必须登录!
注册