我正在Linux上运行R(kubuntu trusty)。我有一个近400MB的csv文件,主要包含数值:
$ ls -lah combined_df.csv
-rw-rw-r-- 1 naught101 naught101 397M Jun 10 15:25 combined_df.csv
我启动R,df <- read.csv('combined_df.csv')
(我得到一个1246536x25数据帧,3个int列,3个logi,1个因子和18个数字),然后使用here中的脚本来检查内存使用情况:
R> .ls.objects()
Type Size Rows Columns
df data.frame 231.4 1246536 25
奇怪的是它报告较少的内存,但我想这只是因为CSV不是数字数据的有效存储方法。
但是当我检查系统内存使用情况时,top
表示R正在使用20%的可用8GB内存。 ps
报告类似:
$ ps aux|grep R
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
naught1+ 32364 5.6 20.4 1738664 1656184 pts/1 S+ 09:47 2:42 /usr/lib/R/bin/exec/R
1.7Gb的RAM用于379MB数据集。这似乎过分了。我知道ps
isn't necessarily an accurate way of measuring memory usage,但肯定不会超过5倍?!为什么R会占用这么多内存?
此外,R似乎在gc()
的输出中报告了类似内容:
R> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 497414 26.6 9091084 485.6 13354239 713.2
Vcells 36995093 282.3 103130536 786.9 128783476 982.6
答案 0 :(得分:5)
正如我在上面的评论中所指出的,文档?read.csv
中有一节标题为&#34; Memory Usage&#34;警告任何基于read.table
的内容都可以使用&#34;令人惊讶的&#34;内存量并建议两件事:
colClasses
参数和nrows
,即使是&#34;温和的高估&#34;。答案 1 :(得分:1)
不确定您是否只想了解R的工作原理,或者您想要替代read.csv
,但是从fread
尝试data.table
,它会更快,我认为它使用更少的记忆:
library(data.table)
dfr <- as.data.frame(fread("somecsvfile.csv"))