上三角行列のデータから対象行列を作る

MDSを実際のデータでやってみよう,という演習をした時の話。

学生には距離行列をmatrix型で全部入れさせたんだけど,自分でやる時は効率が悪いなあとおもっちゃう。だって,対象行列だもん。

上三角分のデータだけ入れたら,対角は0なんだし,自動的に対象行列にしてくれるように関数を書きたいなあ,とおもって書きました。たいしたことはない関数ですが,どこかにニーズがあるかもしれないのでさらしておきます。

 

> dist.mat <- function(x,N){
+ M <- matrix(NA,N,N)
+ M[upper.tri(M)] <- 0
+ M[lower.tri(M)] <- x
+ M <- M+t(M)
+ diag(M) <- 0
+ return(M)
+ }
>
> # 1,2,3,4,5,6のベクトルを与えて,4×4の行列を作る
> dist.mat(1:6,4)
[,1] [,2] [,3] [,4]
[1,] 0 1 2 3
[2,] 1 0 4 5
[3,] 2 4 0 6
[4,] 3 5 6 0

 

ちなみに,青木先生のページにも同様の関数があるんだけど,これは対角にもデータが入っちゃうのでちょっと今回の狙いとは違う。
一応,ご参考までに>>三角行列の要素を与えて対象行列を作る

1件のコメント

コメントは受け付けていません。