2014-04-13 7 views
2

는 I는 행렬 요소를 가지고r에 대각선 및 비대 각 요소가있는 행렬을 채우는 방법은 무엇입니까? 다음

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

I이 모양 대칭 행렬이어야한다 원하는 최종 매트릭스 : 대각선은 DIAG 의해 충전

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 

및 하위 삼각형 영역은 열 방향으로 자리 맞추기로 채 웁니다.

실제로 모든 모든 숫자는 무작위입니다. 따라서 요소로 행렬을 채우는 일반적인 방법이 필요합니다.

미리 감사드립니다.

답변

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