【问题标题】:"'Calloc 'could not allocate memory" in 64-bit R64位R中的“'Calloc'无法分配内存”
【发布时间】:2015-01-16 00:18:31
【问题描述】:

我在具有 30.5 GB RAM 的 Windows Server 2012(64 位)上,在 RStudio 0.98 中运行 R v3.1.2,但仍然遇到 R 达到内存限制的问题。

我在这里查看了常见问题解答:http://cran.r-project.org/bin/windows/base/rw-FAQ.html#There-seems-to-be-a-limit-on-the-memory-it-uses_0021

其中指出 64 位实例的内存限制默认为 RAM 总量,并且可以使用 memory.limit() 检查和设置限制。

memory.limit() 的调用返回31249,确认它能够查看和使用所有30 个演出。

但是,当我对大型数据集(约 10M 行)进行建模调用时:

ctree(as.formula(formula), data=d, control=ctree_control(mincriterion=0.9, minbucket=1000))

我收到以下错误:

'Calloc' could not allocate memory (18446744073673801728 of 8 bytes) 

但是查看系统任务管理器我可以看到超过 25GB 仍然可用,而 R 仅使用 2.3GB。

在 RStudio 之外和在 R 中直接运行建模会产生相同的结果,因此 RStudio 不是变量。

我很困惑 - 为什么 R 拒绝使用我所有的内存?

【问题讨论】:

  • 这不太可能是内存限制错误,除非您真的希望该函数尝试分配 16,384 PB 的内存。可能是 ctree 函数的 C 代码中的一个错误。
  • 许多建模调用会创建传递给它们的数据集的多个副本。与其说是错误不如说是低效的代码。
  • 无赖。所以看起来 ctree 不适用于大型数据集。谢谢大家!

标签: r memory party


【解决方案1】:

问题是 ctree() 函数底层的 C 代码中的错误(@JoshuaUlrich 正确怀疑)。原因是一个整数溢出,现在在 libcoin 包版本 1.0-2 中已修复,partykit 包是基于该包构建的。

(评论:我们之前没有了解到这个错误,因为 party 标签没有用于 StackOverflow 上的问题,并且直到今天才向包维护者报告该问题。感谢 Kris Joanidis 报告了问题并提供了补丁,非常感谢。)

【讨论】:

  • 在 60k x 22 矩阵上进行 partykit::ctree 训练时遇到类似的 Calloc 错误。想知道partykit 是否会很快修补?我的版本是partykit_1.2-2。
  • 请忽略我之前的问题。更新包,错误消失了。
猜你喜欢
  • 2017-12-07
  • 2010-09-07
  • 2019-07-14
  • 2022-01-11
  • 1970-01-01
  • 2011-12-25
  • 2021-04-10
  • 2011-05-27
  • 2013-12-23
相关资源
最近更新 更多