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

将嵌套列表转换为R中的多维数组,保留切片顺序,r,matlab,R,Matlab,我需要在R和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" "

我需要在R和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

因此,数组创建的顺序与使用unlist解析列表的顺序不同。如何有效地执行此操作,保留索引顺序和维度?如果可能的话,我希望避免嵌套的sapplies等(“手动”解析)

这里是多维数组转置(
t
)函数的一个推广:

tarray <- function(x) aperm(x, rev(seq_along(dim(x))))
> nestlist[[2]][[2]][[3]]
[1] "223"
> ar[2,2,3]
[1] "214"
tarray <- function(x) aperm(x, rev(seq_along(dim(x))))
ar <- tarray(array(unlist(nestlist), c(4, 3, 2)))
ar[2,2,3]
# [1] "223"