2

次のようなマトリックスの要素があります。

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

ここで、対角線は diag によって塗りつぶされ、下三角領域は offdiag によって列ごとに塗りつぶされます。

実際には、すべての数字はランダムです。したがって、マトリックスに要素を入力する一般的な方法が必要です。

前もって感謝します!

4

1 に答える 1

6

これを試して:

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
于 2014-04-13T08:50:14.773 に答える