R stats - 分配大矩阵/ Linux时的内存问题

Emm*_*uel 6 linux statistics memory-management r

我已经阅读了几个关于R中内存问题的线程,我似乎无法找到解决问题的方法.

我在一个大数据集的几个子集上运行一种LASSO回归.对于某些子集,它运行良好,对于一些较大的子集,它不起作用,类型"无法分配大小为1.6Gb的向量"的错误.错误发生在代码的这一行:

example <- cv.glmnet(x=bigmatrix, y=price, nfolds=3)
Run Code Online (Sandbox Code Playgroud)

它还取决于"bigmatrix"中包含的变量数量.

我试用了R和R64用于Mac和R用于PC但最近在Linux上使用了更快的虚拟机,以为我会避免任何内存问题.它更好但仍有一些限制,即使memory.limit表示"Inf".

无论如何要做这项工作还是我必须在矩阵中删除一些变量或者采用较小的数据子集?

我已经读过R正在寻找一些连续的内存,也许我应该预先分配矩阵?任何的想法 ?

JD *_*ong 8

让我稍微介绍一下@richardh所说的话.您使用R加载的所有数据都会占用RAM.因此,您加载主数据并使用一些RAM.然后,您将数据子集化,以便子集使用较小的块.然后回归算法需要一个比你的子集大的块,因为它做了一些操作和旋转.有时我可以通过执行以下操作来更好地使用RAM:

  1. 使用save()将初始数据集保存到磁盘
  2. 获取数据的子集
  3. rm()初始数据集,因此它不再在内存中
  4. 对子集进行分析
  5. 保存分析结果
  6. 完全转储内存中的所有项:rm(list = ls())
  7. 使用load()将步骤1中的初始数据集加载回RAM
  8. 根据需要循环步骤2-7

小心第6步,尽量不要射击.在R内存中转储一切.如果它没有被保存,它就会消失.一个更微妙的方法是删除你确定不需要的大对象,而不是删除rm(list = ls()).

如果您仍需要更多RAM,则可能需要在Amazon的云中运行分析.他们的高内存四倍超大型实例拥有超过68GB的RAM.有时当我遇到内存限制时,我发现最简单的事情就是去云端,在那里我可以像我想要的那样邋with RAM.

Jeremy Anglim有一篇很好的博客文章,其中包含一些关于R中内存管理的技巧.在那篇博文中,Jeremy链接到我之前发现的有用的StackOverflow问题.