0

ここ数日、7000x7000 の距離行列を作成する必要があるという問題について投稿してきました。すべてをメモリ上で実行すると、割り当てベクトルエラーが発生しませんでした。Windows XP SP 3、3GB RAM、32 ビット システムを使用しています。もともと bigmemory ライブラリを使用したかったのですが、Windows では使用できないようです。私は でいくつかの読書をしたff packageので、これは私がこれまでに思いついたものです:

require(ff)    
ffmat <- ff(vmode="double", dim=c(7000,7000))
ffmat <- as.matrix(dist(data[1:7000, ], diag=TRUE, upper=TRUE))

問題は、まだベクトル割り当てエラーが発生することです。dim(data)= 7000x182 (多くの変数) で あることに注意してください。

gc()事後分析を実行すると、memory.size()背中が正常なレベルに戻ります。作成された ff に書き込む前に、R が結果をメモリに格納しているかのようです。これを回避する方法はありますか?

4

3 に答える 3

0

おそらく、すべてを 1 つのステップで行うのではなく、タスクを細かく分割して、個々の部分をマトリックスに割り当てる必要があるでしょう。

および関数は、結果が ff オブジェクトになることを認識せず、メモリ内で自分の役割を実行しようとしますdistas.matrix

dist 関数は異なるデータセット間の距離を計算しないため、距離を手動で計算するのが最も簡単な場合がありますが、パッケージには対角外の距離を計算する関数が含まれている場合があります。

于 2013-05-28T16:52:57.380 に答える
0

「作成された ff に書き込む前に、R が結果をメモリに格納しているようです。これを回避する方法はありますか?」

それはまさにRがやっていることです。コードの記述方法は 2 つのことを行います。ffオブジェクトを作成し、それを によって作成された従来のマトリックスで上書きしますas.matrix

dist関数を拡張してオブジェクトを操作したり、を使用ffする独自の実装を作成したりできます。distff

于 2013-05-28T17:44:24.790 に答える