2012-11-03 53 views
1

我正在運行R來處理大小約爲1G的文件,將其過濾爲幾個較小的文件,然後嘗試將其打印出來。我得到了這樣的錯誤在不同的點在整個過程:R中的內存使用情況/分配

**Error: cannot allocate vector of size 79.4 Mb** 

這種規模的載體應該是一個不是問題的問題,有多少內存I /要/與合作。我的機器具有24Gb的內存,並且絕大多數內存仍然是免費的,即使在其中包含這些大型對象的R環境已啓動並運行時,我也會看到上述錯誤。

free -m 
      total  used  free  shared buffers  cached 
Mem:   24213  2134  22079   0   55  965 
-/+ buffers/cache:  1113  23100 
Swap:  32705   0  32705 

這裏爲R的響應GC():

corner  used (Mb) gc trigger (Mb) max used (Mb) 
Ncells 673097 18.0 1073225 28.7 956062 25.6 
Vcells 182223974 1390.3 195242849 1489.6 182848399 1395.1 

我在Ubuntu 12.04.1 LTS工作

這裏是從我使用設備的某些規格:

i7-3930K 3.20 GHz Hexa-core (6 Core)12MB Cache 
ASUS P9X79 s2011 DDR3-1333MHZ,1600 upto 64GB 
32GB DDR3 (8x4GB Module) 
128GB SSD drive 
Asus nVidia 2GB GTX660 TI-DC2O-2GD5 GeForce GTX 660 Ti i 

這是我試圖寫入文件的對象:

dim(plant) 
[1] 10409404  13 

「植物」對象屬於「data.frame」類。這裏是提示錯誤的代碼行之一:

write.table(plant, "file.txt", quote=F, sep="\t", row.names=T, col.names=F) 

任何幫助解決這個問題將不勝感激。

+0

只是爲了澄清,這個錯誤信息意味着R實際上已經填滿了幾乎所有的RAM,並且需要_another_79mb找不到。這是一個普遍的混亂。 – joran

+0

很可能,您正在運行效率低下的代碼來分割您的內存。儘管您還剩下很多內存,但R無法在內存中爲79.4 Mb的小矢量找到連續的空間。最可能的罪魁禍首是一個構造,它像'in(i in ...){data < - rbind(data,...)}'一樣遞增地增加矩陣或data.frame的大小。你的代碼中有這樣的東西嗎? – flodel

+0

您是否使用R的64位版本? – James

回答

0

嘗試使用memory.limit()函數!

- 
memory.limit(2000) 
- 
+0

使用Windows 7與90Gb RAM我無法獲得memory.limit()去高於3583.是否有可能? –