R中的内存问题

时间:2013-09-04 13:38:58

标签: r memory-management garbage-collection

这是一种经常发生的现象。我试图操纵某种大数据,例如

a <- matrix( rnorm( 1e4 * 200 ), ncol= 1e4 )
gr <- factor( rep( 1:2, each= 100 ) )
l <- lm( a ~ gr )
covs <- estVar( l )
cors <- cov2cor( covs )

通常会报告以下错误:     错误:无法分配大小为509.5 Mb的向量

精细。我删除了一些我不再需要的变量并调用垃圾收集器:

rm( a, l )
gc( TRUE )

但是,错误仍然存​​在。现在我保存R并再次启动它。并且 - 奇迹发生了:内存现在可用了。为什么?如果之前没有足够的内存供R分配,但现在已经足够了,那会有什么变化?我可以强制R以某种方式清理而不将数据保存到磁盘并等待它再次加载它们吗?我不明白。

我的sessionInfo()

> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: i486-pc-linux-gnu (32-bit)

locale:
 [1] LC_CTYPE=en_US.utf8       LC_NUMERIC=C              LC_TIME=en_US.utf8        LC_COLLATE=en_US.utf8     LC_MONETARY=en_US.utf8   
 [6] LC_MESSAGES=en_US.utf8    LC_PAPER=C                LC_NAME=C                 LC_ADDRESS=C              LC_TELEPHONE=C           
[11] LC_MEASUREMENT=en_US.utf8 LC_IDENTIFICATION=C      

attached base packages:
[1] graphics  utils     datasets  grDevices stats     methods   base     

P.S。:系统似乎还有大量未使用的内存,如free所述。 top报告我的R进程(在错误之前)从我的8中消耗了大约2GB,并且还剩下更多。

2 个答案:

答案 0 :(得分:2)

安装并使用64位R以利用更多RAM。来自?Memory-limits

  

的Unix
  地址空间限制是系统特定的:32位操作系统限制不超过4Gb:通常为3Gb。在64位操作系统上运行32位可执行文件具有类似的限制:64位可执行文件将具有基本上无限的系统特定限制(例如,x86_64 cpus上的Linux为128Tb)。

答案 1 :(得分:0)

不确定在32位机器上还能做些什么。也许尝试使用一种流行的内存处理软件包,如bigmemory?这是一个链接http://www.bigmemory.org/