2016-04-18 9 views
1

行列のすべての行に対して数値を取って演算を実行する関数をRに書いています。ここでの行列エラーR

the 0.41800 0.249680 -0.41242 0.121700 0.345270 -0.044457 -0.49688 -0.178620 -0.00066023 -0.656600 0.278430 -0.14767 -0.55677 0.14658 -0.0095095 
. 0.15164 0.301770 -0.16763 0.176840 0.317190 0.339730 -0.43478 -0.310860 -0.44999000 -0.294860 0.166080 0.11963 -0.41328 -0.42353 0.5986800 
of 0.70853 0.570880 -0.47160 0.180480 0.544490 0.726030 0.18157 -0.523930 0.10381000 -0.175660 0.078852 -0.36216 -0.11829 -0.83336 0.1191700 
to 0.68047 -0.039263 0.30186 -0.177920 0.429620 0.032246 -0.41376 0.132280 -0.29847000 -0.085253 0.171180 0.22419 -0.10046 -0.43653 0.3341800 
and 0.26818 0.143460 -0.27877 0.016257 0.113840 0.699230 -0.51332 -0.473680 -0.33075000 -0.138340 0.270200 0.30938 -0.45012 -0.41270 -0.0993200 
in 0.33042 0.249950 -0.60874 0.109230 0.036372 0.151000 -0.55083 -0.074239 -0.09230700 -0.328210 0.095980 -0.82269 -0.36717 -0.67009 0.4290900` 

は私が書くしようとしてんだよ、それはかなりだ:各行列は、ここで私は

function(v1,v2){ 
a <- sum(v1*v2) 
b <- sqrt(sum(v1*v1))* sqrt(sum(v2*v2)) 
return(a/b) 
} 

を行っています計算はここに私のデータのサンプルのだncol(x)が50である、50個の要素を持っている必要があります直接的:

function(w,m) { 
r=matrix(nrow=nrow(m),ncol=2) 
for(i in 1:(nrow(m)-1)) { 
r[i,1]=cosineSim(m[w,],m[i,]) 
} 
r=sort(r,decending=TRUE) 
return (r) 
} 

1)行列mと同じ列と行を持つ新しい行列を作成します。 2)m-1行をループします。 3)各行では、cosineSimを使用して、ループの現在のベクトル(行)のコサイン類似度を計算します。 4)ループの終了が終わったら、結果を保持する配列であるrをソートして返します。

問題は、アルゴリズムが無限ループに入っているように見えることです。

私はこれをプロジェクトのために必要とし、何か助けていただければ幸いです。

+0

Rのベクトルは1ではなく0から始まります。 – TMin

+0

ありがとう、今私の問題は無限ループに入っているようですが、私は完全にそれが実行されていないとは思わない、私は20M要素しかし、私はかなりまともなラップトップを持って、それは数分間実行されています。私はこれを反映するために私の質問を更新します。 – CS2016

答えて

0

TMinの提案のおかげで、私は自分のコードでこの問題を実現することができました。また、無限ループに陥っているのではなく、むしろ20M個の要素をスキャンして、それをやるのに長い時間を要していることを理解しました。