在R中加载/读取数据会占用太多内存

Mac*_*ook 5 r

我正在使用R进行一些数据分析.系统规格:i5 + 4GB RAM.出于某种原因,我的R会话占用了比我的数据大得多的RAM,这让我只有很少的空间用于其他操作.

我读了一个550MB的csv文件,R占用的内存:1.3 - 1.5GB 我把csv保存为.RData文件.文件大小:183MB.在R中加载文件,R占用的内存:780MB.知道为什么会发生这种情况以及如何解决这个问题?

编辑:该文件有123列和1190387行.变量是类型numint.

bde*_*est 16

数值(双精度浮点)存储在8个字节的ram中.
整数值(在本例中)使用4个字节.
您的数据有1,190,387*123 = 146,417,601个值.
如果所有列都是数字,则使用了1,171,340,808字节的ram(~1.09GB).
如果all都是整数,则需要585,670,404个字节(~558MB).

因此,您的数据使用780MB RAM是完全合理的.

非常一般的建议:

  1. 将data.frame转换为矩阵.矩阵运算通常具有较少的开销.
  2. 试试R package bigmemory:http://cran.r-project.org/web/packages/bigmemory/index.html
  3. 买更多的公羊.可能您的机器最高可支持16GB.
  4. 不要同时将所有数据加载到ram中.加载行或列的子集,分析,保存结果,重复.
  5. 使用非常小的测试数据集来设计分析,然后分析具有更多内存的另一台机器/服务器上的完整数据集.


Pau*_*tra 5

R使用更多内存可能是因为某些对象的复制.虽然这些临时副本被删除,但R仍占用空间.要将此内存返回给操作系统,您可以调用该gc功能.但是,当需要内存时,gc会自动调用.

此外,550 mb csv文件映射到R中的550 mb并不明显.这取决于列(float,int,character)的数据类型,它们都使用不同的内存量.

由于R压缩数据,因此Rdata文件较小的事实并不奇怪,请参阅文档save.