2015-10-08 33 views
2

我有一個矩陣的下三角形,我試圖轉換爲一個dissim矩陣,因此它需要是對稱的。R:從較低的對角線製作對稱矩陣

print(rdf) 

     X0  X1  X2  X3 X4 
0 0.0000000  NA  NA  NA NA 
1 0.5340909 0.0000000  NA  NA NA 
2 0.5340909 0.0000000 0.0000000  NA NA 
3 0.3200000 0.5227273 0.5227273 0.0000000 NA 
4 0.6263736 0.4945055 0.4945055 0.5384615 0 

library(gdata) 
upperTriangle(rdf) <- lowerTriangle(rdf) 
isSymmetric(rdf) 
     X0  X1  X2  X3  X4 
0 0.0000000 0.5340909 0.5340909 0.6263736 0.4945055 
1 0.5340909 0.0000000 0.3200000 0.0000000 0.5227273 
2 0.5340909 0.0000000 0.0000000 0.5227273 0.4945055 
3 0.3200000 0.5227273 0.5227273 0.0000000 0.5384615 
4 0.6263736 0.4945055 0.4945055 0.5384615 0.0000000 
[1] FALSE 

這是怎麼回事?請注意,我並不需要使用GDATA

+0

似乎[this](http://stackoverflow.com/questions/18165320/creating-a-symmetric-matrix-in-r)或[this](http://stackoverflow.com/questions/29857378/make- a-matrix-symmetric?lq = 1)可能是重複的。 – aosmith

回答

5

你需要確保你複製的元件被正確地下令:

m <- matrix(NA,4,4) 
m[lower.tri(m,diag=TRUE)] <- 1:10 
    [,1] [,2] [,3] [,4] 
[1,] 1 NA NA NA 
[2,] 2 5 NA NA 
[3,] 3 6 8 NA 
[4,] 4 7 9 10 

makeSymm <- function(m) { 
    m[upper.tri(m)] <- t(m)[upper.tri(m)] 
    return(m) 
} 
makeSymm(m) 

或者你可以使用內置的

Matrix::forceSymmetric(m,uplo="L")