在 R 中对多维数组进行矩阵索引时,有没有办法 select 维度的所有元素?

Is there a way to select all elements of a dimension when matrix-indexing a multidimensional array in R?

我有一个多维数组,我(终于)知道我可以用一个矩阵对其进行子集化,该矩阵的列数与数组中的维数一样多。但是我需要在这个过程中跳过一个维度,get/set 不是那个维度的一个元素,而是所有的元素。怎么做?

array5d[matrix(c(3,15,2,7,9),1)]

等同于

array5d[3,15,2,7,9]

但是

的基于矩阵的等价物是什么
array5d[ ,15,2,7,9]

这里的目标是能够使用一组单独生成的向量的值对数组进行子集化。我并不总是需要在第一个维度保持打开状态的情况下进行子集化,这个(或者更确切地说,这些)因情况而异。我有一个非常丑陋的 eval(str2lang(paste0(...))) 解决方案,但我真的想要一个更健康的方法

更简单的可重现示例:

array3d <- array(1:27,dim=c(3,3,3))
x <- array3d[,1,1]

@user2957945 在评论中指出,将索引向量的 'blank' 元素设置为 TRUE 将允许 do.call('[',...) 到 select 来自该维度的所有元素。

i <- list(TRUE, 1, 1);  do.call('[', c(list(array3d), i))

上一个(次优)答案:

我不知道是否有 simpler/better 方法,但这可以在不使用 str2lang/eval/等的情况下工作:

i <- c(NA,1,1)  ## NA denotes "get all elements from this dimension"
getfun <- function(a,i) {
   i <- as.list(i)
   for (j in seq_along(i)) {
     if (all(is.na(i[[j]]))) i[[j]] <- seq(dim(a)[j])
   }
   v <- as.matrix(do.call(expand.grid,i))
   a[v]
}
getfun(array3d,i)