2014-04-13 1239 views
2

我有一個矩陣的元素如下:如何在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填充。

實際上,所有的數字都是隨機的。所以我需要一個通用的方式來填充矩陣元素。

提前致謝!

回答

5

試試這個:

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