2013-10-23 76 views
3

我試圖給「10000000 * 6」邏輯矩陣賦值。這個過程將是1)創建一個矩陣; 2)然後將值分配給矩陣的每個元素。爲了簡化我的問題,我只是展示瞭如何將一個值分配給矩陣的一個元素。如何處理R中的大矩陣或data.frame

下面是代碼:

m <- matrix(data = NA, ncol= 6, nrow= 10000000) 
m[1,1] <- 1 

錯誤:不能分配大小的矢量228.9 MB

有創建「10000000 * 6」邏輯矩陣時沒有錯誤,但分配時,有值。

我也試着做同樣的任務,但用較小的矩陣(100 * 6)。事情運作良好。

這裏是代碼:

m <- matrix(data = NA, ncol= 6, nrow= 100) 
m[1,1] <- 1 

誰能幫我對付更大的矩陣?

回答

7

它可能會有點意外,但R有點拖延。有一個命令「創建」一個對象可能不會真正這樣做,直到有真正的行動需求,例如用一個「真實」值填充矩陣。描述這個術語是「傳承」。此外,對現有對象的分配可能會構建重複或甚至是三重對象,這些對象將佔用空間,直到它們被垃圾收集爲止。

所以這就是你要做的。退出R.關機。使用最少的其他應用程序重新啓動系統,因爲它們都佔用內存。重新啓動R並運行你的命令。如果在系統加載之前有典型的4GB內存,我預測會取得成功。 228.9 Mb並不是真的很大,但在你的情況下,它是打破駱駝背的秸稈。 R需要能夠爲每個對象找到連續的內存,垃圾收集通常不會對內存進行碎片整理。