如何在r中给出对角线和非对角线元素的矩阵?

问题描述:

我有一个矩阵的元素如下:如何在r中给出对角线和非对角线元素的矩阵?

diag= rep(1,5) 
offdiag = c(rep(1:4), rep(1:3), rep(1:2), 1) 

最终的矩阵我想应该应该是对称矩阵,看起来像这样:

1 1 2 3 4 
1 1 1 2 3 
2 1 1 1 2 
3 2 1 1 1 
4 3 2 1 1 

对角被诊断填下三角形区域由列向外的offdiag填充。

实际上,所有的数字都是随机的。所以我需要一个通用的方式来填充矩阵元素。

提前致谢!

试试这个:

m <- matrix(NA, ncol = length(diag), nrow = length(diag)) 
m[lower.tri(m)] <- offdiag 
m[upper.tri(m)] <- t(m)[upper.tri(t(m))] 
diag(m) <- diag 
m 
#  [,1] [,2] [,3] [,4] [,5] 
# [1,] 1 1 2 3 4 
# [2,] 1 1 1 2 3 
# [3,] 2 1 1 1 2 
# [4,] 3 2 1 1 1 
# [5,] 4 3 2 1 1 

另一种方法:手动从那里创建一个距离矩阵和工作。

class(offdiag) <- "dist" 
attr(offdiag, "Size") <- length(diag) 
out <- as.matrix(offdiag) 
diag(out) <- diag 
out 
+0

这正是我想要的。谢谢! – wen