个性化阅读
专注于IT技术分析

R中的数组用法完全剖析

本文概述

数组是可以保存多维数据的数据结构。在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维(行列)格式生成的, 并且行和列的名称已更改。

让我们看看如何通过以下示例提取数组中的元素。

  1. 让我们从上面的数组” arr”中提取数字” 7″。
arr[1, 3, 1]

7

上面代码的输出是7。在” arr [1, 3, 1]”行的第3列和第1行中, 提取了第一个数组” arr”。

  1. 要访问1, 则从第1列和第1列的” arr [1, 1, 1]”行1中提取第一个数组” arr”。
arr[1, 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
  1. 你可以使用以下语法访问整个数组’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
  1. 你可以通过以下代码获得整个第二行, 其中arr [2, , 1]获取带有空格的第二行, 而1是要提取的” arr”。
arr[2, , 1]
  • c1
  • 2
  • c2
  • 5
  • c3
  • 8

上面的代码给出以下输出, 并打印c1, c2, c3。

c1 2
c2 5
c3 8
  1. 你可以通过以下代码获得整个第二列, 其中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中创建数组

赞(0)
未经允许不得转载:srcmini » R中的数组用法完全剖析

评论 抢沙发

评论前必须登录!