当向量的长度小于替换长度时,我想通过向量有一个三角形矩阵。 例如:
v<- c(1,2,3,4,5,6)
和
mat<- matrix(0,5,5)
.
如果我使用
mat[upper.tri(mat, diag=FALSE)]<- v
,结果是:
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 2 4 1
[2,] 0 0 3 5 2
[3,] 0 0 0 6 3
[4,] 0 0 0 0 4
[5,] 0 0 0 0 0
但我不想替换矩阵中超过矢量长度的长度。我想要:
[1,] 0 1 2 4 0
[2,] 0 0 3 5 0
[3,] 0 0 0 6 0
[4,] 0 0 0 0 0
[5,] 0 0 0 0 0
您可以将v
的length
调整为上三角形的。这将生成一些可以用零替换的NA
值。
u.tri <- upper.tri(mat, diag=FALSE)
mat[u.tri] <- `length<-`(v, length(u.tri))
mat[is.na(mat)] <- 0
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0 1 2 4 0
# [2,] 0 0 3 5 0
# [3,] 0 0 0 6 0
# [4,] 0 0 0 0 0
# [5,] 0 0 0 0 0