【问题标题】:Understanding Memory Constraints In R [duplicate]了解 R 中的内存约束
【发布时间】:2019-09-21 14:00:43
【问题描述】:

正如标题所示,我正在尝试全面了解 R 的内存限制,因为我有一个规模迅速增长的项目,我担心内存限制很快会成为一个主要问题。

我知道object.size,当在我的环境中最大的项目上运行时,我得到以下输出:

> object.size(raw.pbp.data)
457552240 bytes 

...所以最大的项目是 ~457MB。我还检查了我的 macbook pro 的内存,在 About This Mac --> Storage 中,它显示我的内存为8 GB 1600 MHz DDR3,所以我假设我有 8 GB 可以使用。

显然 457MB 数据帧不是我的 R 环境中唯一的对象,但我不想为每个对象手动运行 object.size 并将字节相加以找到所用内存的总大小。有一个更好的方法吗?告诉我 RStudio 环境中所有对象总共使用的内存的函数会很棒。有这样的功能吗?

另外,当我接近 8GB 时会发生什么 - 我的 R 脚本会停止工作吗?我预计我的数据在不久的将来会增加 5 到 10 倍,这可能会使环境中使用的总内存接近甚至超过 8GB。

最后,如果达到 8GB 内存会使我的 R 脚本无法运行,我有什么选择?如果我将我的数据框转换为数据表,是否会减小整个对象的大小?

非常感谢任何帮助,谢谢!

编辑:保存为.rda 文件,raw.pbp.data 只有 32MB,所以我乐观地认为,当加载到 R 中时,有一种方法可以减小其大小。

【问题讨论】:

  • 我认为pryr::mem_used() 给出了总内存使用量。
  • 这篇帖子有很多很棒的反馈,谢谢大家
  • 请注意,将 object.size 值相加并从物理内存中获取差异可能是不够的。 R 要求新对象驻留在连续的内存块中。

标签: r memory memory-management


【解决方案1】:

我不知道有任何功能,但这有效。你可以用这个来做一个函数:

env <- eapply(environment(), object.size, USE.NAMES = FALSE)
sizes <- c()
for (i in 1:length(env)) {
  sizes[i] <- env[[i]][1]
}
sum(sizes)

除了显而易见的(在服务器上运行或购买更多 RAM)之外,我听说 data.tabledata.frame 更有效。尝试使用它。语法也更简洁!我不能推荐data.table

【讨论】:

    猜你喜欢
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2016-01-14
    • 2019-02-10
    • 2012-12-08
    • 1970-01-01
    相关资源
    最近更新 更多