【问题标题】:Forcing R (and Rstudio) to use the virtual memory on Windows强制 R(和 Rstudio)在 Windows 上使用虚拟内存
【发布时间】:2017-02-14 00:54:41
【问题描述】:

我正在处理大型数据集,并且 R 经常会产生一个错误,告诉它无法分配该大小的向量或者它没有足够的内存。

我的计算机有 16GB RAM (Windows 10),我正在处理大约 4GB 的数据集,但某些操作需要大量内存,例如将数据集从宽格式转换为长格式。 在某些情况下,我可以使用 gc() 来释放一些内存,但很多时候这还不够。

有时我可以将数据集拆分成更小的块,但有时我需要同时处理所有表。

我听说 Linux 用户没有这个问题,但是 Windows 呢?

我尝试在 SSD (200GB) 上设置一个大页面文件,但我发现 R 根本不使用它。

我可以看到任务管理器,当内存消耗达到 16GB 时,R 停止工作。页面文件的大小似乎没有任何区别。

如何强制 R 使用页面文件? 我需要自己编译一些特殊的标志吗?

PD:我的经验是删除对象 rm() 并稍后使用 gc() 不会恢复所有内存。当我对大型数据集执行操作时,无论我是否使用 gc(),我的计算机在每一步的可用内存都越来越少。

PD2:我希望不会听到诸如“您需要更多 RAM 内存”之类的琐碎解决方案

PD3:我一直在测试,问题只发生在 Rstudio。如果我直接使用 R 效果很好。有谁知道如何在 RStudio 中做到这一点。

【问题讨论】:

  • 内存并不贵。如果您需要不寻常的大量(超过 32 GB),您可以随时在线租用。即使您设法使用 SSD 内存,这也会减慢您的分析速度。
  • @Roland,这不是问题的解决方案,它只是一个补丁。
  • 你总是可以安装 linux ...
  • 我从未尝试过,但您可以尝试增加 R_MAX_MEM_SIZE。如果您正确设置了窗口,则可能(我从未尝试过)使用您的页面文件。 cran.r-project.org/bin/windows/base/…
  • 好的,我一直在测试,问题只发生在 Rstudio。如果我直接使用 R 效果很好。

标签: r memory


【解决方案1】:

为了让它在您每次启动 RStudio 时自动运行,使用 R_MAX_MEM_SIZE 的解决方案将被忽略,无论是作为环境变量创建还是在 .Rprofile 中创建。

写入 memory.limit(64000) 也会被忽略。

正确的方法是在文件.Rprofile中添加以下行

invisible(utils::memory.limit(64000))

或任何你想要的数字。

当然,您需要有一个足够大的页面文件。该数字包括可用 RAM 和可用页面文件空间。

使用页面文件速度较慢,但​​只会在需要时使用。

我发现奇怪的是,它只能让你增加要使用的最大内存,但不允许你减少它。

【讨论】:

    猜你喜欢
    • 2014-10-23
    • 2017-11-25
    • 2012-05-05
    • 1970-01-01
    • 2014-09-17
    • 2014-06-17
    • 2017-01-06
    • 2014-12-16
    • 2014-04-02
    相关资源
    最近更新 更多