我正在運行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)
任何幫助解決這個問題將不勝感激。
只是爲了澄清,這個錯誤信息意味着R實際上已經填滿了幾乎所有的RAM,並且需要_another_79mb找不到。這是一個普遍的混亂。 – joran
很可能,您正在運行效率低下的代碼來分割您的內存。儘管您還剩下很多內存,但R無法在內存中爲79.4 Mb的小矢量找到連續的空間。最可能的罪魁禍首是一個構造,它像'in(i in ...){data < - rbind(data,...)}'一樣遞增地增加矩陣或data.frame的大小。你的代碼中有這樣的東西嗎? – flodel
您是否使用R的64位版本? – James