为什么矩阵中的一行是列表?R

为什么矩阵中的一行是列表?R,r,list,matrix,do.call,R,List,Matrix,Do.call,我得到了一个矩阵列表,X行乘2列,称为矩阵列表 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" 我想把我所有的矩阵叠加在一个全对矩阵中,所以我这样做了

我得到了一个矩阵列表,X行乘2列,称为矩阵列表

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=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) 您将如何使其工作,即我的矩阵的每一行都必须是一个矩阵?

我确信您的
矩阵列表2
如下所示:

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"
它有“矩阵”类,但仍有“列表”模式。这就是为什么提取第一行时会得到一个列表:

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"

相关:


  • 我确信您的
    矩阵列表\u 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"
    
    它有“矩阵”类,但仍有“列表”模式。这就是为什么提取第一行时会得到一个列表:

    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"
    

    相关:


  • 好了,伙计们,我终于找到了解决办法

    提醒

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

    好了,伙计们,我终于找到了解决办法

    提醒

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

    通过
    unlist(lappy(
    ),我猜你的意思是
    sapply
    ?好的。谢谢你的链接。但是我不相信它。
    sapply(DF,f)
    对于我所面对的几乎任何
    f
    都是即时的(当然包括
    模式和
    ).ok thx对于lil tip@Zheyuan Li,我终于做到了,但我被迫首先提取矩阵堆栈中的所有值,然后根据这些提取的值构建一个新矩阵。不知道确切原因,但它是有效的。通过
    unlist(lappy(
    ,我猜你的意思是
    sapply
    ?好的。谢谢你的链接。不过我不相信它。
    sapply(DF,f)
    对于我所面对的几乎任何
    f
    都是即时的(当然包括
    模式
    ).ok thx对于lil tip@Zheyuan Li,我终于做到了,但我被迫首先提取矩阵堆栈中的所有值,然后根据这些提取的值构建一个新矩阵。不知道确切原因,但它是有效的。