增加(或减少)R进程可用的内存

166
我想增加(或减少)可供 R 使用的内存量。有哪些方法可以实现这一点?
7个回答

77

来源:

http://gking.harvard.edu/zelig/docs/How_do_I2.html (备份)

Windows用户可能会出现R已经用完内存的错误。

如果您已经安装了R并随后增加了更多的RAM,您可能需要重新安装R以利用额外的容量。

您也可以手动设置可用内存的数量。关闭R,然后右键单击您的R程序图标(位于桌面或程序目录中的图标)。选择“属性”,然后选择“快捷方式”选项卡。查找“目标”字段,在指向R可执行文件的引号之后添加

--max-mem-size=500M

如下图所示。您可以将此值增加到2GB或安装的物理RAM的最大值。

如果出现R无法分配长度为x的矢量的错误,请关闭R并将以下行添加到“目标”字段中:

--max-vsize=500M

或适当地调整。您始终可以通过在R提示符下键入来检查R有多少可用内存

memory.limit()

此命令可获取可用内存量,单位为MB。在之前的R版本中,你需要使用以下命令:round(memory.limit()/2^20, 2)


8
请注意,在32位的Windows系统中,无论你安装了多少内存,R只能使用最多3GB的内存。REvolution Computing提供了适用于64位Windows系统的R 64位版本,它可以使用所有可用的RAM。您可以在以下网址找到该版本:http://www.revolution-computing.com/products/revolution-enterprise.php - David Smith
6
只有两点需要注意:(i) memory.limit() 只适用于 Windows 系统,(ii) 返回正确答案的命令是 round(memory.limit(),2) -- 至少对于我的 R 版本(2.8.1)是这样。 - medriscoll
38
有没有关于如何在Linux上获得类似memory.limit()的信息的建议? - exl
5
该网页已经不存在了。没有图片,我很难理解这个内容。例如,我没有看到“快捷方式”选项卡。另外,您能使用它来减少最大内存吗? - blakeoft
6
那么,那些使用Mac的用户呢?我们能对此做些什么吗? - Alfredo Lozano
显示剩余5条评论

62

使用 memory.limit() 命令可以查看当前内存限制。通过命令 memory.limit(size=2500) 可以将默认值增加到指定大小,其中大小以MB为单位。为了充分利用此功能,您需要使用64位操作系统。

另一个建议是尽可能使用内存高效的对象:例如,使用矩阵而不是数据框。


3
我不是很明白这是如何运作的。我遇到了内存限制问题,并收到错误消息“达到总分配量8182Mb”。我使用8GB RAM的64位系统,所以似乎无法解决。然而,出于好玩,我设置了memory.limit(size=50000)...结果它奏效了!但为什么呢? - theforestecologist
2
我知道这个问题已经有7年了,但是我正在尝试减少R可以使用的RAM数量,但是每当我尝试减少值时,我都会收到以下消息(我在64位Windows机器上有12GB RAM)。 警告信息: 在memory.limit(4095)中:无法减少内存限制:被忽略。 - hellter

18

10

如果可以的话,Microsoft Windows将接受进程的任何内存请求。

除了虚拟内存大小之外,没有提供给进程的内存限制。

32位系统中,无论运行多少应用程序,任何进程的虚拟内存大小都为4GB。任何进程都可以在32位系统中分配高达4GB的内存。

实际上,Windows根据进程的请求和页面文件机制自动从RAM或页面文件中分配已分配内存的某些部分。

但是,另一个限制是页面文件的大小。如果您的页面文件很小,则无法分配大内存。您可以根据Microsoft的建议增加页面文件的大小以获得更多的内存空间。


6

要增加分配给R的内存量,您可以使用memory.limit函数。

memory.limit(size = ...)

或者

memory.size(max = ...)

关于参数

  • size - 数值型。如果为 NA,则报告内存限制,否则请求新的限制,单位为 Mb。32位 R 版本只允许最大值为 4095,但请参阅“详细信息”。
  • max - 逻辑型。如果为 TRUE,则报告从操作系统获取的最大内存量;如果为 FALSE,则报告当前使用的内存量;如果为 NA,则报告内存限制。

5
在R 4.2.0中不支持memory.limit() - cineS.

6
  1. 购买更多内存
  2. 切换到64位操作系统。可以和第一点结合起来。

29
购买更多内存(并切换到其他操作系统)并不是一个普遍适用的解决方案。 - om-nom-nom
19
当然可以,就像解决与手头问题相符的小问题一样。仅仅希望解决方案通常也不会让你得到一个。 - Dirk Eddelbuettel

4
在RStudio中,要增加:
file.edit(file.path("~", ".Rprofile"))

然后在.Rprofile中输入以下内容并保存

invisible(utils::memory.limit(size = 60000))

降低:

打开.Rprofile文件

invisible(utils::memory.limit(size = 30000))

保存并重启RStudio。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接