2017-07-25 8 views
4

のベクターからバイナリー隣接行列を作成します。各要素は1から効率的に何5.私はこのようになりますベクトルがあるとインデックス

を通じて、いくつかのインデックスに対応するように

x <- sample(5, 500, replace = TRUE) 

をこのベクトルからバイナリ隣接行列を作成する方法は?具体的には、行列AA[i,j] = 1ならばx[i] = x[j]なら0でなければなりません。

答えて

7

1行では、次の2つのライン

myMat <- outer(x, x, "==") 
myMat[] <- as.integer(myMat) 

彼らは同じだということを確認して

 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1 0 0 0 0 0 1 0 0  0 
[2,] 0 1 1 1 0 1 0 0 1  0 
[3,] 0 1 1 1 0 1 0 0 1  0 
[4,] 0 1 1 1 0 1 0 0 1  0 
[5,] 0 0 0 0 1 0 0 0 0  0 
[6,] 0 1 1 1 0 1 0 0 1  0 
[7,] 1 0 0 0 0 0 1 0 0  0 
[8,] 0 0 0 0 0 0 0 1 0  0 
[9,] 0 1 1 1 0 1 0 0 1  0 
[10,] 0 0 0 0 0 0 0 0 0  1 

かを、返す

outer(x, x, function(x, y) as.integer(x==y)) 

行うことができます。

identical(myMat, outer(x, x, function(x, y) as.integer(x==y))) 
[1] TRUE 

データ

set.seed(1234) 
x <- sample(5, 10, replace = TRUE) 
+1

多分も 'sapply(seq_along(x)は、関数(I)sapply(seq_along(x)は、関数(J)as.integer(X [I] = = x [j]))) ' –

関連する問題