0

機能に問題がありvegdistます。jaccardで距離行列を計算したい。バイナリデータがあります。

問題は、138037 行 (サイト) と 89 列 (種) のマトリックスがあることです。私のスクリプトは次のとおりです。

library("vegan")
memory.limit(size = 100000) # it gives  1 Tera  from HDD in case ram memory is over
DF=as.data.frame(MODELOS)
DF=na.omit(DF)
DISTAN=vegdist(DF[,2:ncol(DF)],"jaccard")

またはより再現可能:

nsites <- 138037
nspp <- 89
DF <- matrix(0,nrow=nsites,ncol=nspp)
DISTAN=vegdist(DF,"jaccard")

ほとんどすぐにエラーが発生します。

Error in double(N * (N - 1)/2) : vector size specified is too large

これはメモリ エラーだと思いますが、32 GB の RAM と 1 テラの HDD を搭載した PC を使用している場合、その理由がわかりません。

distまた、パッケージ プロキシの関数を使用して dist マトリックスを実行しようとしています。

library(proxy)
vector=dist(DF, method = "Jaccard")

実行を開始しますが、RAM が 10 GB に達すると、R がエラーをコミットしたことをウィンドウが通知し、ウィンドウが閉じられるため、閉じて新しいセクションを開始します。

私は本当に何が起こっているのかわからず、これを解決する方法も知りません。誰か助けてもらえますか?

4

1 に答える 1

0

N <- 138037; log10(N*(N-1)/2)dist10^9.98 = ほぼ 10^10 (100 億) 個の異なる要素を持つオブジェクトを計算しようとしていることを示しています。log10(2^31-1)=9.3R のリリースされたバージョンは、使用可能なメモリの量に関係なく、2^31-1 要素 ( ) 未満のオブジェクトのみを処理できます。この制限は、R の開発バージョンでは緩和されています (「LONG VECTORS」を検索してください)。R のベクトルの最大長も参照してください。ただし、より大きな問題は、実際に何をするつもりかということです100億の異なる要素を持つ距離行列を使用して??? あなたがやろうとしていることの文脈についてもう少し説明すると、もっと役立つ答えが得られるかもしれません (つまり、「なぜこれが起こっているのですか?」だけでなく、「どうすればよいですか?」)。これ以上のコンテキストがなければ、私が言えることは、「R の開発バージョンに切り替えてみて、それが役立つかどうかを確認する」ことだけです (ただし、そうではない可能性があります。R のすべての側面で長いベクトルがサポートされているわけではなく、特に基礎となる C を使用するコードではサポートされていません)。または FORTRAN ソース)。

proxy::distが異なるエラー動作をする理由がわかりません。

于 2013-02-08T23:47:34.950 に答える