0

我得到了矩阵 X 行 2 列的列表,称为 list_of_matrices_by2

list_of_matrices_by2[1:3]
[[1]]
[,1]   [,2]
[1,] "7204" "d" 
[2,] "7204" "a" 

[[2]]
[,1]   [,2]
[1,] "2032" "b" 
[2,] "2032" "e" 
[3,] "2032" "a" 

[[3]]
[,1]  [,2]
[1,] "802" "d" 
[2,] "802" "b"

我想将所有矩阵堆叠在一个 all_pairs 矩阵中,所以我这样做了

all_pairs=do.call(rbind,list_of_matrices_by2)
all_pairs[1:10]
[,1]   [,2]
[1,] "7204" "d" 
[2,] "7204" "a" 
[3,] "2032" "b" 
[4,] "2032" "e" 
[5,] "2032" "a" 
[6,] "802"  "d" 
[7,] "802"  "b" 
[8,] "4674" "c" 
[9,] "4674" "a" 
[10,] "3886" "b"
class(all_pairs)
[1] "matrix"

出于某种原因,我需要这个矩阵的行是类矩阵。但这应该不是问题,因为矩阵的行是 R 中的矩阵,对。但不是!

all_pairs[1,]
[[1]]
[1] "7204"

[[2]]
[1] "d

所以这是我的问题:1)为什么会这样?为什么矩阵的一行可能是一个列表?2)你会怎么做才能让它工作,即我的矩阵的每一行都必须是一个矩阵?

4

2 回答 2

2

我敢肯定你list_of_matrices_by2是这样的:

x <- list(matrix(list("7204","7204","d","a"), ncol = 2),
          matrix(list("2032","2032","2032","b","e","a"), ncol = 2),
          matrix(list("802","802","d","b"), ncol = 2))

#[[1]]
#     [,1]   [,2]
#[1,] "7204" "d" 
#[2,] "7204" "a" 

#[[2]]
#     [,1]   [,2]
#[1,] "2032" "b" 
#[2,] "2032" "e" 
#[3,] "2032" "a" 

#[[3]]
#     [,1]  [,2]
#[1,] "802" "d" 
#[2,] "802" "b" 

unlist(lapply(x, class))
# [1] "matrix" "matrix" "matrix"

unlist(lapply(x, mode))
# [1] "list" "list" "list"

所以你确实有一个矩阵,但它不是列表矩阵而不是数字矩阵。您可以rbind照常执行:

y <- do.call(rbind, x)
#     [,1]   [,2]
#[1,] "7204" "d" 
#[2,] "7204" "a" 
#[3,] "2032" "b" 
#[4,] "2032" "e" 
#[5,] "2032" "a" 
#[6,] "802"  "d" 
#[7,] "802"  "b" 

它具有“矩阵”类,但仍具有“列表”模式。这就是为什么当您提取第一行时会得到一个列表:

y[1, ]
#[[1]]
#[1] "7204"

#[[2]]
#[1] "d"

我不知道你是如何获得这些矩阵的。如果您可以控制生成过程,那么最终得到数字矩阵会很好。如果您无法控制它,您需要手动转换它们,如下所示:

x <- lapply(x, function (u) matrix(unlist(u), ncol = 2))
unlist(lapply(x, mode))
# [1] "character" "character" "character"

然后你可以做

do.call(rbind, x)

有关的:

  1. 为什么这个矩阵不是数字的?
  2. 如何创建列表矩阵?
于 2016-09-02T13:50:34.060 回答
0

好的,我终于找到了解决方案。

提醒

all_pairs=do.call(rbind,list_of_matrices_by2)

将我的矩阵的所有值提取到向量中

extracted_values=unlist(as.vector(t(all_pairs)))

构建新矩阵

all_pairs_new=t(matrix(data = extracted_values,nrow = 2,ncol = 10000))
于 2016-09-02T14:05:36.890 回答