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件のコメント
コメントは受け付けていません。