r - 如何在 R session 中手动分配内存?

标签 r

是否可以在 R session 中手动分配内存?我在共享 Windows 服务器上工作,有时会遇到内存问题。使用 Stata 时,可以通过以下方式为该 session 分配内存:

set min_memory 50g

R中有类似的东西吗?


编辑以提供更好的上下文:

为什么我需要这样的命令?

假设我们有一个脚本,其 RAM 使用峰值为 20Gb,但大多数时间只使用 5Gb。 R 处理这个问题的自然方式是仅根据需要分配内存(在大多数情况下这似乎是合理的)。但想象一下,您需要在共享服务器(具有比该服务器大得多的 RAM)上运行该程序,由于其他用户的需求,该服务器在程序峰值时可能没有 20Gb 的可用内存。

在这种情况下,我认为可以通过在启动程序时预先分配 R session 所需的 20Gb(因为在 Stata 中是可能的)来避免这种风险,然后避免在运行中浪费资源那甚至不会完成。

最佳答案

TL;DR:我做了很多挖掘,但找不到任何暗示“最小内存大小”设置的内容。

如果我正确理解您的问题,您希望 R 为 session 预先请求大量内存(20 Gb),然后自行管理该内存,以确保资源在需要时可用。据我所知,这是不可能的,而且这与 R 设计者所采用的策略大致相反。

正如您所说,R 通过以下方式分配和管理内存:

  1. 设置 session 最大限制
  2. 在创建对象时进行分配
  3. 在一定限制内,对象完成后立即回收内存

对于小型分配,我认为步骤 3 是使用 C 函数 alloca() 完成的,该函数使用堆栈,对于较大的分配,它使用 malloc() 在堆上分配。这有效意味着,R 可以请求一个小内存池(128 字节,根据 Advanced R )来管理快速来去的小对象,但对于较大的对象,它允许操作系统处理它。

我从源代码和R internals中的评论中看到的所有焦点表明开发团队专注于编写仅保存当前计算所需内存量的软件,然后立即释放它:

We want the heap sizes to get set at levels adequate for the current computations. The present mechanism uses only the size of the current live heap to provide information about the current needs; since the current live heap size can be very volatile, the adjustment mechanism only makes gradual adjustments. A more sophisticated strategy would use more of the live heap history (lines 314 – 320 in source)

话虽这么说,可能有一个包或扩展重写了我不知道的一些核心功能——尽管这看起来与 R 的编写方式有很大的不同,但它可能是一个项目的分支而不是包。如果您对自己这样做不感兴趣,我会推荐一个更普通的解决方案,例如过夜运行程序以避免资源竞争。或者增量处理您的数据,或者看看数据库或 bigmemory 包之类的东西是否可以帮助您。祝你好运!

关于r - 如何在 R session 中手动分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45359483/

相关文章:

r - 在 R 中保存回归方程的最佳方法?

r - 在不影响箱线图所依据的数据的情况下限制ggplot中箱线图中y轴的范围

r - 如何在R中按列按降序对数据进行排序

r - 堆积和排名条形图

r - 如何在 ggplot2 中使用填充美学绘制两组的相对比例?

r - Keras R 图像分类模型中的形状错误

r - 混合 unnest_longer 和 unnest_wider

r - as.character 在函数中的使用

r - ggplot2删除轴标签

mysql - R 数据库连接错误