0

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

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     

PS:据报道,系统似乎还有大量未使用的内存freetop报告说我的 R 进程(在错误之前)在我的 8 中使用了 ~ 2GB,而且还剩下很多。

4

2 回答 2

2

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

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

于 2013-09-04T14:19:53.170 回答
0

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

于 2013-09-04T14:30:34.000 回答