私の作業プロジェクトでは、PCoA (主座標分析、別名多次元スケーリング) を実行する必要があります。ただし、R を使用してこの分析を実行すると、いくつかの問題が発生します。
関数 cmdscale は行列または dist のみを入力として受け入れます。dist 関数はエラーを返します。
Error: cannot allocate vector of size 4.2 Gb
In addition: Warning messages:
1: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
2: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
3: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
4: In dist(mydata[c(3, 4)], method = "euclidian", diag = FALSE, upper = FALSE) :
Reached total allocation of 4020Mb: see help(memory.size)
そして、マトリックスを使用すると、入力が次のように変更されます。
[,1]
[1,] Integer,33741
[2,] Integer,33741
データセットの内容をオンラインで投稿することはできませんが、ディメンションを提供することはできます。データセットは長さ 33741 行、幅 11 列で、最初の列は ID で、その他の 10 の値は PCoA に使用する必要があります。
エラーでわかるように、私は 2 つの列しか使用していませんが、既にメモリ エラーが発生しています。
私の質問です
が、dist関数のメモリ制限で管理できるようにデータを操作することは可能ですか?
ベクトルを 2 列 2 行の出力に変更するという行列関数の何が間違っていますか?
私が試したこと:ガベージコレクションでクリア、GUIを再起動、システムを再起動。
システム: Windows 7 x64 i7 920qm 1.8ghz 4GB DDR3 RAM
使用したコード:
mydata <- read.table(file, header=TRUE)
mydist <- dist(mydata[c(3,4)], method="euclidian", diag=FALSE, upper=FALSE)
mymatrix <- matrix(mydata[c(3,4)], byrow=FALSE)
mymatrix <- matrix(cbind(mydata[c(3,4)]))
mycmdscale <- cmdscale(mydist, k=2, eig=FALSE, add=FALSE, x.ret=FALSE)
mycmdscale <- cmdscale(mymatrix, k=2, eig=FALSE, add=FALSE, x.ret=FALSE)
plot(mycmdscale)
もちろん、この順序でコードを実行したわけではありませんが、このコードには、データをロードしようとしたメソッドが含まれています。
返信ありがとうございます。