【问题标题】:Incorrect number of subscripts on matrix?矩阵上的下标数量不正确?
【发布时间】:2020-03-05 23:26:27
【问题描述】:

我有一个包含 5x5 矩阵的列表,并尝试使用 for 循环将列表中的每个矩阵转换为向量,如下所示,

listT<-list()
number <- 0

for(a in 0:3){
  for(i in 1:(5-a)){
    for(j in 1:(5-a)){
      A<-matrix(0,nrow=5,ncol=5)
      A[c(i:(i+a)),c(j:(j+a))]<-1
      number<-number+1
      listT[[number]]<-A

       }

   }

}


vectors<-matrix(0,25,54)
for (number in 1:54){
  vectors[,number] <- t(as.vector(listT[[number]]))
}

但它出现了错误消息“向量中的错误 [,number]

【问题讨论】:

  • 嗨菲比,你能提供你的listT吗?
  • 您好,欢迎来到 stackoverflow。请提供一个完整的工作示例。在您的情况下,这还包括listT
  • 我编辑了原始帖子以包含我的代码以创建 listT
  • lapply(listT, as.vector) ?最好有一个 minimal 示例,这样您就可以更好地显示您的预期输出。
  • 无法重现错误,一切正常。哦,把最后一个循环中的转置函数t()去掉,根本不需要。

标签: r matrix


【解决方案1】:

sapply() 不是最后的循环,而是遍历列表的每个元素,将函数应用于列表:

sapply(listT, as.vector)

以下是我将如何重构完整代码:

n_by_n <- 3
A <- matrix(0, nrow = n_by_n, ncol = n_by_n)

lst <- unlist(
  lapply(seq_len(n_by_n -1) -1, 
         function(a) {
           all_combos <- expand.grid(1:(n_by_n-a), 1:(n_by_n-a))
           lapply(as.data.frame(t(all_combos)),
                  function(x) {
                    A[seq(x[1], x[1] + a), seq(x[2], x[2] + a)] <- 1
                    return(A)
                    }
                  )
       }),
  use.names = F,
  recursive = F)

sapply(lst, as.vector)

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13]
 [1,]    1    0    0    0    0    0    0    0    0     1     0     0     0
 [2,]    0    1    0    0    0    0    0    0    0     1     1     0     0
 [3,]    0    0    1    0    0    0    0    0    0     0     1     0     0
 [4,]    0    0    0    1    0    0    0    0    0     1     0     1     0
 [5,]    0    0    0    0    1    0    0    0    0     1     1     1     1
 [6,]    0    0    0    0    0    1    0    0    0     0     1     0     1
 [7,]    0    0    0    0    0    0    1    0    0     0     0     1     0
 [8,]    0    0    0    0    0    0    0    1    0     0     0     1     1
 [9,]    0    0    0    0    0    0    0    0    1     0     0     0     1

【讨论】:

    【解决方案2】:

    我确实在代码中添加了一行,并且没有错误。见代码:

    listT <- list()
    number = 0 . # --------------------------- I added this line.
    for(a in 0:3){
      for(i in 1:(5-a)){
        for(j in 1:(5-a)){
          A<-matrix(0,nrow=5,ncol=5)
          A[c(i:(i+a)),c(j:(j+a))] <- 1
          number <- number+1
          listT[[number]]<-A
    
           }
    
       }
    
    }
    
    vectors<-matrix(0,25,54)
    for (number in 1:54){
      vectors[,number] <- t(as.vector(listT[[number]]))
    }
    

    输出在这里:

    > vectors
          [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24]
     [1,]    1    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     [2,]    0    0    0    0    0    1    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     [3,]    0    0    0    0    0    0    0    0    0     0     1     0     0     0     0     0     0     0     0     0     0     0     0     0
     [4,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0
     [5,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0
     [6,]    0    1    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     [7,]    0    0    0    0    0    0    1    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
     [8,]    0    0    0    0    0    0    0    0    0     0     0     1     0     0     0     0     0     0     0     0     0     0     0     0
     [9,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0
    [10,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     1     0     0
    [11,]    0    0    1    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
    [12,]    0    0    0    0    0    0    0    1    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
    [13,]    0    0    0    0    0    0    0    0    0     0     0     0     1     0     0     0     0     0     0     0     0     0     0     0
    [14,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0
    [15,]    0    0    0    0    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     1     0
    [16,]    0    0    0    1    0    0    0    0    0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
    [17,]    0    0    0    0    0    0    0    0    1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
    [18,]    0    0    0    0    0    0    0    0    0     0     0     0     0     1     0     0     0     0     0     0     0     0     0     0
          [,25] [,26] [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38] [,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47]
     [1,]     0     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0     0     0
     [2,]     0     1     0     0     0     1     0     0     0     0     0     0     0     0     0     0     0     1     0     0     1     0     0
     [3,]     0     0     0     0     0     1     0     0     0     1     0     0     0     0     0     0     0     1     0     0     1     0     0
     [4,]     0     0     0     0     0     0     0     0     0     1     0     0     0     1     0     0     0     0     0     0     1     0     0
     [5,]     0     0     0     0     0     0     0     0     0     0     0     0     0     1     0     0     0     0     0     0     0     0     0
     [6,]     0     1     1     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1     1     0     0     0     0
     [7,]     0     1     1     0     0     1     1     0     0     0     0     0     0     0     0     0     0     1     1     0     1     1     0
     [8,]     0     0     0     0     0     1     1     0     0     1     1     0     0     0     0     0     0     1     1     0     1     1     0
     [9,]     0     0     0     0     0     0     0     0     0     1     1     0     0     1     1     0     0     0     0     0     1     1     0
    [10,]     0     0     0     0     0     0     0     0     0     0     0     0     0     1     1     0     0     0     0     0     0     0     0
    [11,]     0     0     1     1     0     0     0     0     0     0     0     0     0     0     0     0     0     1     1     1     0     0     0
    [12,]     0     0     1     1     0     0     1     1     0     0     0     0     0     0     0     0     0     1     1     1     1     1     1
    [13,]     0     0     0     0     0     0     1     1     0     0     1     1     0     0     0     0     0     1     1     1     1     1     1
    [14,]     0     0     0     0     0     0     0     0     0     0     1     1     0     0     1     1     0     0     0     0     1     1     1
    [15,]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     1     1     0     0     0     0     0     0     0
    [16,]     0     0     0     1     1     0     0     0     0     0     0     0     0     0     0     0     0     0     1     1     0     0     0
    [17,]     0     0     0     1     1     0     0     1     1     0     0     0     0     0     0     0     0     0     1     1     0     1     1
    [18,]     0     0     0     0     0     0     0     1     1     0     0     1     1     0     0     0     0     0     1     1     0     1     1
          [,48] [,49] [,50] [,51] [,52] [,53] [,54]
     [1,]     0     0     0     1     0     0     0
     [2,]     0     0     0     1     0     1     0
     [3,]     1     0     0     1     0     1     0
     [4,]     1     0     0     1     0     1     0
     [5,]     1     0     0     0     0     1     0
     [6,]     0     0     0     1     1     0     0
     [7,]     0     0     0     1     1     1     1
     [8,]     1     1     0     1     1     1     1
     [9,]     1     1     0     1     1     1     1
    [10,]     1     1     0     0     0     1     1
    [11,]     0     0     0     1     1     0     0
    [12,]     0     0     0     1     1     1     1
    [13,]     1     1     1     1     1     1     1
    [14,]     1     1     1     1     1     1     1
    [15,]     1     1     1     0     0     1     1
    [16,]     0     0     0     1     1     0     0
    [17,]     0     0     0     1     1     1     1
    [18,]     0     1     1     1     1     1     1
     [ reached getOption("max.print") -- omitted 7 rows ]
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 2016-04-27
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2016-10-11
      相关资源
      最近更新 更多