将复杂的矩阵列表转换为矩阵数组

时间:2013-12-09 19:14:27

标签: arrays r list matrix

我想将矩阵列表转换为装订矩阵数组。我的列表在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}

由于我的列表在mgetme矩阵的数量方面变得很大,我需要在列表m的所有l3级别自动执行此过程。理想情况下,我希望代码生成j数组getmegetme2,... getme_j,其中只有l3用作输入。这就是变量级别names(l3[[1]])的名称在路上应用。

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]])