R中的多维数组

时间:2015-03-19 13:20:38

标签: r

当我注意到这一点时,我正在R中尝试一些东西。我用零初始化一个3D数组,然后使用超出范围的第一个索引进行赋值操作。

arr = array(0, c(22, 246, 2))
arr[3463] = 0.15

现在我也可以使用arr[9, 158, 1]访问此值。

arr[3463] == arr[9, 158, 1]返回TRUE

如何将超出范围的第一个索引(3463)映射到3个索引(9, 158, 1)?

2 个答案:

答案 0 :(得分:4)

数组只是具有维度属性的向量。因此,您还可以使用向量子集分配。使用二维数组a.k.a.矩阵更容易看到:

m <- matrix(1:16, 4)
dput(m)
#structure(1:16, .Dim = c(4L, 4L))
m[7] <- 0
m
#     [,1] [,2] [,3] [,4]
#[1,]    1    5    9   13
#[2,]    2    6   10   14
#[3,]    3    0   11   15
#[4,]    4    8   12   16

注意向量中的第七个值是如何改变的。

答案 1 :(得分:2)

数组不过是一个属性为维度的向量。因此,数组的总长度为22*246*2 = 10824,而3463不是arr中的索引。

现在要了解为什么存在这种映射arr[3463] == arr[9, 158, 1],这是一个简单的算术:3463 = 157*22+9

带有索引的数组中的值(使3463)取最左边的维度。因此,您从第一列的第一个22*246元素矩阵开始,每行读取一行。你读了所有数据(22)。然后转到第二列并读取所有行(在此阶段您读取44数据)。等等。

您最终到达第一个矩阵的9列的行158