[英]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.