理解R中的内存约束

理解R中的内存约束,r,memory,memory-management,R,Memory,Memory Management,正如标题所示,我正试图用R完全理解内存约束,因为我有一个规模正在快速增长的项目,我担心内存约束很快会成为一个主要问题 我知道object.size,在我的环境中运行最大的项目时,我得到以下输出: > object.size(raw.pbp.data) 457552240 bytes …因此最大的项目约为457MB。我还检查了macbook pro的内存,在About This Mac-->存储中,它显示我的内存为8 GB 1600 MHz DDR3,因此我假设我有8 GB的内存可供使用

正如标题所示,我正试图用R完全理解内存约束,因为我有一个规模正在快速增长的项目,我担心内存约束很快会成为一个主要问题

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

> object.size(raw.pbp.data)
457552240 bytes 
…因此最大的项目约为457MB。我还检查了macbook pro的内存,在About This Mac-->存储中,它显示我的内存为
8 GB 1600 MHz DDR3
,因此我假设我有8 GB的内存可供使用

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

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

最后,如果达到8GB的内存将使我的R脚本无法运行,我有什么选择?如果我将dataframe转换为datatable,是否可以减少对象的总体大小

非常感谢您的帮助,谢谢


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

我不知道有任何函数,但这是可行的。您可以从中生成一个函数:

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

env我不知道有任何函数,但这是有效的。您可以从中生成一个函数:

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

env我认为
pryr::mem_used()
给出了内存的总使用量。另一个有用的链接在这篇文章中提供了大量的反馈,谢谢大家。我们知道,求和object.size值并从物理ram中取差可能是不够的。R要求新对象驻留在连续的内存块中。我认为
pryr::mem_used()
给出了总内存使用量。另一个有用的链接是本文中的大量反馈,谢谢大家。我们知道,求和object.size值并从物理ram中取差可能不够。R要求新对象驻留在连续的内存块中。