0

私の研究では、各被験者に、n = 5個のオブジェクト間の非類似性に関する主観的な意見についてn*(n-1)/ 2の質問が与えられました(後で3方向多次元尺度構成法で使用するため)。

たとえば次のように配置された10項目のベクトルvから非類似度行列を作成したいと思います(n = 5の場合)。

  1
  2 5
  3 6 8
  4 7 9 10

これは、この特定のnに対してそれを達成するためのコードサンプルコードです。

dissim<-rep(0,n*n)
dim(dissim)<-c(5,5)
dissim[2,1]<-v[1]
dissim[3,1]<-v[2]
dissim[4,1]<-v[3]
dissim[5,1]<-v[4]
dissim[3,2]<-v[5]
dissim[4,2]<-v[6]
dissim[5,2]<-v[7]
dissim[4,3]<-v[8]
dissim[5,3]<-v[9]
dissim[5,4]<-v[10]

任意のnに対してそれを行うのに役立つユーティリティ関数はありますか?2つのネストされたループを使用してそれを実行できることはわかっていますが、専用の関数を使用すると、コードがより明確になります。

そして多分私はその過程で別の有用なライブラリの存在について学ぶだろうか?

4

2 に答える 2

3
n <- 5
mat <- matrix(0, ncol = n, nrow = n)
mat[lower.tri(mat)] <- 1:10
mat
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    1    0    0    0    0
[3,]    2    5    0    0    0
[4,]    3    6    8    0    0
[5,]    4    7    9   10    0
于 2012-07-15T11:43:07.860 に答える
0

ええと... たまたま自分で解決策を見つけました。dist オブジェクトの内部構造が単なるベクトル vであるということが起こります。それで、何が機能するかは次のとおりです。

dissim<-v
class(dissim)='dist'
attr(dissim,"Size")<-5
dissim<-as.dist(dissim)

現在は機能していますが、これが文書化された方法であり、常に有効であるかどうかはわかりません。

于 2012-07-15T11:45:14.167 に答える