我想将矩阵列表转换为装订矩阵数组。我的列表在l3
中显示为:
getme<-matrix(1,3,3)
getme2<-matrix(2,4,4)
l1<-list(getme,getme2)
names(l1)<-c('getme','getme2')
getme<-matrix(3,3,3)
getme2<-matrix(4,4,4)
l2<-list(getme,getme2)
names(l2)<-c('getme','getme2')
l3<-list(l1,l2)
目标是将每个适形矩阵附加到数组中。数组/变量的名称应该等于列表级别的名称。
例如:
getme<-array(dim=c(3,3,2))
m=2
for(i in 1:m){getme[,,i]<-l3[[i]]$getme}
由于我的列表在m
和getme
矩阵的数量方面变得很大,我需要在列表m
的所有l3
级别自动执行此过程。理想情况下,我希望代码生成j
数组getme
,getme2
,... getme_j
,其中只有l3
用作输入。这就是变量级别names(l3[[1]])
的名称在路上应用。
答案 0 :(得分:2)
abind
包中的abind
可以很容易地将矩阵组合到数组中:
library(abind)
res <- lapply(seq_along(l3[[1]]), function(x)
abind(lapply(l3, "[[", x), along = 3))
外部lapply
函数用于将函数应用于数字形式1到列表l3
的长度。当前数字由参数x
表示。另一个lapply
命令用于从列表x
中提取l3
个元素。这些元素组合成一个abind
的数组。由于l3
的长度为2
,因此外lapply
会返回长度为2
的列表。
这将返回一个数组列表:
[[1]]
, , 1
[,1] [,2] [,3]
[1,] 1 1 1
[2,] 1 1 1
[3,] 1 1 1
, , 2
[,1] [,2] [,3]
[1,] 3 3 3
[2,] 3 3 3
[3,] 3 3 3
[[2]]
, , 1
[,1] [,2] [,3] [,4]
[1,] 2 2 2 2
[2,] 2 2 2 2
[3,] 2 2 2 2
[4,] 2 2 2 2
, , 2
[,1] [,2] [,3] [,4]
[1,] 4 4 4 4
[2,] 4 4 4 4
[3,] 4 4 4 4
[4,] 4 4 4 4
您可以将原始名称与
一起使用names(res) <- names(l3[[1]])