簡體   English   中英

在 R 中對多維數組進行矩陣索引時,有沒有辦法 select 維度的所有元素?

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

我有一個多維數組,我(最終)知道我可以用一個矩陣對其進行子集化,該矩陣的列數與數組中的維數一樣多。 但是我需要在此過程中跳過一個維度,以獲取/設置不是該維度的一個元素,而是所有元素。 如何?

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 的評論中指出,將索引向量的“空白”元素設置為 TRUE 將允許do.call('[',...)到 select 該維度的所有元素。

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

以前的(次優)答案:

我不知道是否有更簡單/更好的方法,但這在不使用str2lang / eval /etc 的情況下有效:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM