如何在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
这正是我想要的。谢谢! – wen