R:从列表中创建一个矩阵数组

时间:2017-05-26 12:33:40

标签: arrays r list matrix

我正在尝试从矩阵创建一个数组。矩阵都是相同的尺寸(N×N)。我有一个没有标题的单个csv文件中的每个矩阵。数据以制表符分隔。 在其他线程中,建议按如下方式进行:

temp = list.files(pattern="*.csv")
named.list <- lapply(temp, read.csv,header=FALSE, sep = "")
arr <- abind(named.list)

然而,这并没有创造出我想要的东西。这创建了2维Nx(N * k)数据帧(其中N =列/行,k =矩阵数)。 所以在我的情况下,我有5个矩阵,40列和40行。使用abind会创建[1:40,1:200]数据框。

> str(arr)
 int [1:40, 1:200] 0 1 0 0 0 0 0 0 0 0 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:200] "V1" "V2" "V3" "V4" ...

我想要的是[1:40,1:40,1:5]三维矩阵数组:

> str(z)
 int [1:40, 1:40, 1:5] 0 1 0 0 0 0 0 0 0 0 ...

我认为我的根本问题是我无法将named.list中的数据框列表转换为矩阵列表。

3 个答案:

答案 0 :(得分:1)

我解决了它,&#34; abind&#34;让我走近缺少以下行:

arr2<-array(arr,dim= c(40,40,5))

这给了我:

str(arr2)
 int [1:40, 1:40, 1:5] 0 1 0 0 0 0 0 0 0 0 ...

abind是要走的路。如果事先使用了rbindlist,则各个数据集的结构会搞乱。

答案 1 :(得分:1)

这对我有用

temp = list.files(pattern="*.csv")

r <- simplify2array(temp)

然而,结果数组的维数为 [nrow, ncol, n],其中前两个元素是矩阵维数,最后一个是存储在 r 中的矩阵数。我的具体分析需要 [n, nrow, ncol] 来实现此更改我使用 aperm 函数如下r <- aperm(r, c(3,1,2)) 基于此答案 function from base package that is a generalization of the transpose t() function

答案 2 :(得分:0)

您可以使用:

library(data.table)
arr <- rbindlist(named.list ,use.names = T,fill = T);