我需要在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
如您所见,尺寸为预期的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等(&#34;手动&#34;解析)。
答案 0 :(得分: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"