如何用seq()函数按行填充矩阵?实现特定三角矩阵需求
修正矩阵填充代码实现三角矩阵需求
你已创建一个6行6列的全NA矩阵:
matrixinp = matrix(data=NA, nrow=6, ncol=6)
现有填充代码运行后得到不符合预期的结果:
[,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
你的目标是生成每行前i个元素为seq(i)(第1行前1个元素是1,第2行前2个是1、2,以此类推),其余元素保持NA的三角矩阵:
[,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
解决方案
方法1:逐行循环填充
通过遍历矩阵的每一行,对第i行的前i个位置直接赋值seq(i):
matrixinp = matrix(data=NA, nrow=6, ncol=6) for (i in 1:nrow(matrixinp)) { matrixinp[i, 1:i] = seq(i) } print(matrixinp)
方法2:向量化操作(无需循环)
利用矩阵的索引特性直接生成结果,避免循环:
matrixinp = matrix(data=NA, nrow=6, ncol=6) # 生成行号和列号的矩阵 row_idx <- row(matrixinp) col_idx <- col(matrixinp) # 仅对列号≤行号的位置赋值为对应列号,其余保持NA matrixinp[col_idx <= row_idx] <- col_idx[col_idx <= row_idx] print(matrixinp)
两种方法均可得到你期望的三角矩阵结果。
内容的提问来源于stack exchange,提问作者Paolo Lorenzini
相关产品推荐
相关产品推荐

