按行填充矩阵

问题描述 投票:0回答:1

我想基于一个函数逐行填充一个矩阵,该函数给出数字 seq(1) 1 seq(2) 1 2 等等的 seq()

    matrixinp = matrix(data=NA, nrow=6, ncol=6) 

> print(matrixinp) 
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   NA   NA   NA   NA   NA   NA
[2,]   NA   NA   NA   NA   NA   NA
[3,]   NA   NA   NA   NA   NA   NA
[4,]   NA   NA   NA   NA   NA   NA
[5,]   NA   NA   NA   NA   NA   NA
[6,]   NA   NA   NA   NA   NA   NA
    
    # display matrix 
    print(matrixinp) 
    
    # fill the elements with some  
    # 90 in a matrix 
    for (i in 1:6){
      aaa<-seq(i)
      print(aaa)
      for(j in 1:6){ 
        matrixinp[j,] = aaa
      } 
    }

这给了我这个:

> print(matrixinp)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    3    1    2    3
[2,]    1    2    3    1    2    3
[3,]    1    2    3    1    2    3
[4,]    1    2    3    1    2    3
[5,]    1    2    3    1    2    3
[6,]    1    2    3    1    2    3

但我想要这个:

> print(matrixinp)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    NA   NA   NA   NA   NA
[2,]    1    2    NA   NA   NA   NA
[3,]    1    2    3    NA   NA   NA
[4,]    1    2    3    4    NA   NA
[5,]    1    2    3    4    5    NA
[6,]    1    2    3    4    5    6
r matrix
1个回答
0
投票

我打赌一行代码可以解决这个问题,R 是一种矢量化语言。

matrixinp <- matrix(data=NA, nrow=6, ncol=6)
matrixinp[lower.tri(matrixinp, diag = TRUE)] <- rep(1:6, 6:1)

matrixinp
#>      [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,]    1   NA   NA   NA   NA   NA
#> [2,]    1    2   NA   NA   NA   NA
#> [3,]    1    2    3   NA   NA   NA
#> [4,]    1    2    3    4   NA   NA
#> [5,]    1    2    3    4    5   NA
#> [6,]    1    2    3    4    5    6

创建于 2024-09-17,使用 reprex v2.1.0

等等,我赌赢了。
诀窍是知道 R 的矩阵是列主矩阵,因此使用索引矩阵

lower.tri
,值将到达正确的位置。

© www.soinside.com 2019 - 2024. All rights reserved.