我的问题可能听起来微不足道的很多你,但经过长时间的互联网搜索,我仍然没有一个答案,以下问题:
如何将三维数组转换为“三维”列表?
假设我有以下内容:
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
“结构相同”的列表?
非常感谢您的帮助!贝斯特,罗曼
5条答案
按热度按时间x33g5p2x1#
可以使用
lapply
:gg0vcinb2#
在plyr中有一个方便的函数:
只需添加
.dims
参数即可保留维名称:ddrv8njm3#
为了好玩(因为我迟到了),这里有另一个只使用R基的。像@joran一样,它是可编程的,你可以很容易地沿着任何给定的维度
n
进行分割:它还将保留您的所有dimname(如果有的话),请参见例如:
svujldwt4#
在tidyverse的
purrr
包中有一个函数array_tree()
,它可以最小化地做到这一点:如图所示,默认情况下,它会保留名称。一般来说,这应该优于
plyr::alply()
(@joran的答案),因为plyr
不再处于积极的开发中。eaf3rand5#
在R的最新版本(>= 4.1.0,2021年5月)中,
apply
现在有一个simplify=
参数,这可以通过在第三维上循环来实现,如:它还将保留每个矩阵的列表
names
和dimnames
。