我想基于一个函数逐行填充一个矩阵,该函数给出数字 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 是一种矢量化语言。
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
,值将到达正确的位置。