在R中将嵌套列表转换为多维数组,保留切片顺序

3

我需要在R和Matlab之间双向导出一些数据,而Matlab更喜欢数组。我试图在转换为Matlab之前将我的R嵌套列表数据结构转换为多维数组,以使切片保持不变。这就是我目前正在做的事情(类似于):

nestlist <- lapply(1:2, function(x) lapply(1:3, function(y) lapply(1:4, function(z) paste(x, y, z, sep = ""))))
unlist(nestlist)
 [1] "111" "112" "113" "114" "121" "122" "123" "124" "131" "132" "133" "134"
[13] "211" "212" "213" "214" "221" "222" "223" "224" "231" "232" "233" "234"
> length(nestlist)
[1] 2
> length(nestlist[[1]])
[1] 3
> length(nestlist[[1]][[1]])
[1] 4

如您所见,尺寸为2x3x4,符合预期。现在:

> ar <- array(unlist(nestlist), c(2, 3, 4))
> nestlist[[1]][[1]][[1]]
[1] "111"
> ar[1,1,1]
[1] "111"

到目前为止,情况还不错,但是....
> nestlist[[2]][[2]][[3]]
[1] "223"
> ar[2,2,3]
[1] "214"

某种方式,使用unlist解析列表时,数组的创建顺序不同。如何有效地处理这个问题,保留索引顺序和维数?如果可能的话,我想避免使用嵌套sapplies等(手动分析)。

1个回答

2

这里是多维数组转置函数 (t) 的一般化描述:

tarray <- function(x) aperm(x, rev(seq_along(dim(x))))

然后你可以如下定义ar:
ar <- tarray(array(unlist(nestlist), c(4, 3, 2)))
ar[2,2,3]
# [1] "223"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接