我已经阅读了几篇关于R中内存问题的帖子,但我似乎找不到解决问题的方法。
我在一个大型数据集的几个子集上运行一种套索回归。对于一些子集,它工作得很好,对于一些更大的子集,它不能工作,错误类型为“无法分配大小为1.6 of的向量”。错误发生在以下代码行:
example <- cv.glmnet(x=bigmatrix, y=price, nfolds=3)
它还取决于"bigmatrix“中包含的变量的数量。
我尝试了在Mac和PC上使用R和R64,但最近在Linux上使用了一个速度更快的虚拟机,我认为我可以避免任何内存问题。这是更好的,但仍然有一些限制,即使memory.limit表示"Inf“。
有没有办法做到这一点,或者我必须在矩阵中削减一些变量,或者获取更小的数据子集?
我读到R正在寻找一些连续的内存位,也许我应该预先分配矩阵?有什么想法吗?
发布于 2011-01-16 21:10:26
让我在@richardh所说的基础上稍作补充。使用R加载的所有数据都会消耗RAM。所以你加载主数据,它使用了一些大块的RAM。然后,您对数据进行子集,以便子集使用较小的块。然后回归算法需要一个比你的子集更大的块,因为它做了一些操作和旋转。有时,我可以通过执行以下操作来更好地使用RAM:
G217
小心第六步,尽量不要把你的眼睛打出来。这会将R内存中的所有内容都转储。如果它没有被保存,它就会消失。一种更微妙的方法是删除您确定不需要的大对象,并且不执行rm(list=ls())。
如果您仍然需要更多的RAM,您可能希望在Amazon的云中运行您的分析。他们的高内存四重超大型实例拥有超过68 of的RAM。有时,当我遇到内存限制时,我发现最容易做的事情就是去云端,在那里我可以随意使用RAM。
Jeremy Anglim有一个很好的blog post,其中包含了一些关于R中内存管理的技巧。在那篇博客文章中,Jeremy链接到了this previous StackOverflow question,我发现这些链接很有帮助。
发布于 2011-01-16 20:42:51
我不认为这与连续内存有关,只是默认情况下R只在RAM中工作(即不能写入缓存)。Farnsworth's guide to econometrics in R提到了filehash
包来支持写入磁盘,但我没有使用它的经验。
你最好的办法可能是使用较小的子集,通过删除rm
不需要的变量来手动管理内存(例如,运行回归,存储结果,删除旧矩阵,加载新矩阵,重复),和/或获得更多内存。HTH。
发布于 2011-01-18 17:26:01
试试bigmemory package。它非常容易使用。其思想是将数据存储在HDD上的文件中,然后在R中创建一个对象作为对该文件的引用。我已经测试过这个,它工作得很好。
也有一些替代方法,比如"ff“。有关详细信息,请参阅CRAN Task View: High-Performance and Parallel Computing with R。
https://stackoverflow.com/questions/4707825
复制相似问题