我的问题对你们中的很多人来说可能是微不足道的,但是经过长时间的互联网搜索,我仍然没有下列问题的答案:
如何将三维数组转换为“三维”列表?
假设我有以下内容:
A1 <- matrix(runif(12),4,3)
A2 <- matrix(runif(12),4,3)
A3 <- matrix(runif(12),4,3)
MyList <- list(A1,A2,A3)
MyArray <- array(NA,c(4,3,3))
MyArray[,,1] <- A1
MyArray[,,2] <- A2
MyArray[,,3] <- A3
有没有一种方法可以将
MyArray
转换为与MyList
具有“相同结构”的列表?非常感谢您的帮助!
最好,罗曼
最佳答案
为了好玩(因为我来晚了),这是另一个仅使用基数R的表达式。就像@joran一样,它是可编程的,从某种意义上说,您可以轻松地沿任意给定的维度n
进行拆分:
split.along.dim <- function(a, n)
setNames(lapply(split(a, arrayInd(seq_along(a), dim(a))[, n]),
array, dim = dim(a)[-n], dimnames(a)[-n]),
dimnames(a)[[n]])
identical(split.along.dim(MyArray, n = 3), MyList)
# [1] TRUE
如果有的话,它也会保留所有的名字,例如:
dimnames(MyArray) <- Map(paste0, letters[seq_along(dim(MyArray))],
lapply(dim(MyArray), seq))
split.along.dim(MyArray, n = 3)
关于arrays - 列出三维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198751/