対称行列の作成に苦労しています。
ベクトルとしましょうv <- c(1,2,3)
次のようなマトリックスを作成したいと思います。
_matrix(ncol = 3, nrow = 3, c(1,2,3,2,3,1,3,1,2), byrow = FALSE)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 2 3 1
[3,] 3 1 2
_
(これは単なる序文です。長さの異なるベクトルがたくさんあります。)
これは、対角線c(1,3,2)
(ベクトルv
とは異なる)の対称行列であり、行列を作成する手動プロセスは次のようになります。
最初の行をベース(ベクトルv
)として使用して、左側の残りの値で空のスペースを埋めます。
どんな助けでもありがたいです。ありがとう!
もう1つのオプションは、Reduce
を使用してc(v[-1], v[1])
を累積的にすることです。
do.call(rbind, Reduce(function(x, y) c(x[-1], x[1]), v[-1], v, accumulate = TRUE))
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 2 3 1
#[3,] 3 1 2