1

キーワード間の類似性 (約 50,000 の一意のキーワード) の非常に大きな csv ファイル (約 9,100 万行なので、R では for ループが長すぎる) があり、data.frame に読み込むと次のようになります。

> df   
kwd1 kwd2 similarity  
a  b  1  
b  a  1  
c  a  2  
a  c  2 

これはスパース リストであり、sparseMatrix() を使用してスパース マトリックスに変換できます。

> myMatrix 
  a b c  
a . 1 2
b 1 . .
c 2 . .

ただし、これをdistオブジェクトに変換したいと思います。as.dist(myMatrix) を試しましたが、as.dist() では「問題が大きすぎます」というエラーが表示されました。また、myMatrix = myMatrix * lower.tri(myMatrix) を使用して、疎行列を下三角疎行列に変換してから dist オブジェクトに変換しようとしましたが (これの方がよいと考えられます)、同じエラーが発生しましたが、下側に関しては.tri 関数。

助けてくれてありがとう!

4

1 に答える 1

2

クラスのオブジェクトは"dist"密なオブジェクトです。スパース表現から移動するには、次のオーダーのベクトルが必要になります。

R> 0.5*(91000000*90999999)
[1] 4.1405e+15

要素(対角線を与えるか取る)。R では、ベクトルの最大長は 2^31 - 1 です。

R> 2^31 - 1
[1] 2147483647

これは、高密度オブジェクトを格納するために必要な要素の数よりもはるかに小さい"dist"ため、それは不可能であり、それが からのエラーの理由ですdist()。同様の理由で、データの下三角バージョンも同じ長さの制限を持つベクトルとして保持されるため、密なオブジェクトとして格納することはできません。

この時点で、実際の問題と、相違点オブジェクトの目的について詳しく説明する必要があると思います (別の質問で!)? 9,100 万個のオブジェクト間のすべての相違点が必要ですか、それとも、R のベクトルの現在の長さの制限に収まるサンプルを取得できますか?

于 2012-09-12T08:03:34.857 に答える