要列出的三维数组 [英] Three dimensional array to list

查看:37
本文介绍了要列出的三维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题对很多人来说可能听起来微不足道,但经过长时间的互联网搜索后,我仍然没有以下问题的答案:

my question might sound trivial to quite a lot of you, but after a long internet search I still don't have an answer to the following question:

如何将三维数组转换为三维"列表?

How to convert a three dimensional array to a "three dimensional" list?

假设我有以下内容:

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 具有相同结构"的列表?

Is there a way to convert MyArray into a list with "the same structure" as MyList?

非常感谢您的帮助!最好的,罗曼

Thank you very much for your help! Best, Romain

推荐答案

为了好玩(因为我迟到了),这是另一个只使用基础 R 的方案.就像@joran 的一样,它是可编程的,你可以很容易地沿任何给定维度分割 n:

For fun (since I'm late), here is another one that only uses base R. Like @joran's, it is programmable in the sense you can easily split along any given dimension 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

如果您有任何名称,它还会保留您的所有名称,例如:

It will also preserve all your dimnames if you have any, see for example:

dimnames(MyArray) <- Map(paste0, letters[seq_along(dim(MyArray))],
                                 lapply(dim(MyArray), seq))
split.along.dim(MyArray, n = 3)

这篇关于要列出的三维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆