【发布时间】:2016-04-20 02:49:56
【问题描述】:
我有一个多维数组,按以下方式创建:
my_array <- array(seq(12), dim=my_dims, dimnames=my_dimnames)
其中“my_dims”是一个数字向量,“my_dimnames”是一个字符向量列表,长度对应于“mydims”中指定的维度,例如:
my_dims <- c(2, 3, 2)
my_dimnames <- list(c("D_11", "D_12"), c("D_21", "D_22", "D_23"), c("D_31", "D_32"))
所以“my_array”看起来像这样:
, , D_31
D_21 D_22 D_23
D_11 1 3 5
D_12 2 4 6
, , D_32
D_21 D_22 D_23
D_11 7 9 11
D_12 8 10 12
另外,我有一个包含每个维度的特定值的字符向量:
my_values <- c("D_11", "D_21", "D_32")
现在,从这个问题:R - how to get a value of a multi-dimensional array by a vector of indices 我了解到我可以使用矩阵索引从“my_array”中的特定单元格读取和写入值,如下所示:
my_array[matrix(my_values, 1)]
得到值“7”和
my_array[matrix(my_values, 1)] <- 1
将同一单元格设置为值“1”
但是,我不明白的是,如何使用此方法从“my_array”中获取特定维度的所有值,给定所有其他维度的特定值。
例如:如何获得包含第一维所有值的向量,第二维和第三维具有固定值“D_21”和“D_32”?因此,在这种情况下,我尝试提取的将是以下形式的向量:
c(7, 8)
我需要如何调整矩阵索引来达到这个结果?
提前非常感谢!
【问题讨论】:
-
使用阵列的
dimnames?像:my_array[cbind(dimnames(my_array)[[1]], "D_21", "D_32")]也许? -
如果您想要所有维度,“my_values”的外观如何?
-
@alexis_laz:这正是我想知道的。我希望有一些类似于通过将维度留空来选择data.frame的所有元素(就像使用“df [,c(c1,c2)]”在数据框df中的单元格c1和c2的所有行)。有没有类似的方法来制定像“my_values”这样的列表或向量来生成索引矩阵?
-
@scholt :从您链接的 QA 中,您可以使用
do.call("[", ..。要模拟维度中缺少的参数,请使用substitute()。例如。do.call("[", c(list(my_array), list("D_11", "D_23", "D_31")));do.call("[", c(list(my_array), list(substitute(), "D_23", "D_31")));do.call("[", c(list(my_array), list("D_12", substitute(), "D_31", drop = FALSE)))等。您对do.call的论点需要在“列表”中;例如对于“my_values”,您需要as.list(my_values)。
标签: r matrix multidimensional-array indexing