對於我的工作項目,我必須執行PCoA(主座標分析又稱多維縮放)。 但是,當使用R來執行此分析時,我遇到了一些問題。由於大數據集R中的PCoA錯誤
功能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的64位酷睿i7 1.8GHz的920qm 4GB DDR3內存
使用代碼:
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)
當然我沒有這個順序運行的代碼,但是這個代碼包含了方法我試圖加載數據。
在此先感謝您的答覆。
那麼我希望對樣品進行主座標分析,但是我工作的公司沒有能夠處理這些計算的服務器,所以我試圖做一個本地計算機的解決方法。今天我休息一天,所以我不能嘗試data.matrix,但如果它能夠工作,我會在明天再回到你身邊。已經感謝您的時間,因爲這確實給了我需要告訴我的老闆的信息。 – Sinshz 2013-05-15 11:21:42
所以我試圖用你的方法加載矩陣,這些方法確實可以創建矩陣。但是,執行PCoA(cmdscale)的函數不接受這些類型的矩陣,它要求:cmdscale中的錯誤(testmatrix,k = 2,eig = FALSE,add = FALSE,x.ret = FALSE): 距離必須是'dist'或方矩陣的結果。我懷疑用我有限的記憶來進行分析是可能的,但任何想法都是值得歡迎的。 – Sinshz 2013-05-17 06:48:29
@Sinshz這兩件事情沒有關係。我認爲這兩個問題是無關的;爲此道歉。我所展示的是如何從數據框的選定列/組件獲取矩陣。 'dist'仍然會失敗,因爲數據的行數需要更多的RAM來存儲它,而不是你的機器可用的。 – 2013-05-17 14:34:55