Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 矩阵上的下标数不正确?_R_Matrix - Fatal编程技术网

R 矩阵上的下标数不正确?

R 矩阵上的下标数不正确?,r,matrix,R,Matrix,我有一个用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

我有一个用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]]))
}

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

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

在列表的每个元素中循环,而不是在最后循环,
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

菲比,你能提供你的
列表吗?嗨,欢迎来到stackoverflow。请提供一个完整的工作示例。在你的例子中,这也将包括
listT
。我编辑了原始文章以包含我的代码来创建listT
lappy(listT,as.vector)
?最好有一个最小的示例,以便更好地显示预期的输出。无法重现错误,一切都按预期进行。哦,从最后一个循环中删除转置函数
t()
,它根本不需要。
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