了解R中的内存约束

时间:2019-05-03 03:00:31

标签: r memory memory-management

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

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

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

...所以最大的项目是〜457MB。我还在“关于本机”->“存储”中检查了我的macbook pro的内存,它显示的内存为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中的大小

1 个答案:

答案 0 :(得分:0)

我不知道任何功能,但是可以。您可以使用以下功能:

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