gpt4 book ai didi

R 内存问题与 memory.limit()

转载 作者:行者123 更新时间:2023-12-02 07:39:09 25 4
gpt4 key购买 nike

我正在一台 16GB 内存的机器上运行一些模拟。首先,我遇到了一些错误:

Error: cannot allocate vector of size 6000.1 Mb (the number might be not accurate)

然后我尝试使用以下方法为 R 分配更多内存:

memory.limit(1E10)

选择这么大的数字是因为memory.limit不允许我选择小于系统总内存的数字

In memory.size(size) : cannot decrease memory limit: ignored

完成此操作后,我可以完成模拟,但 R 占用了大约 15GB 内存,这阻止了我进行任何后期分析。

我使用object.size()来估计所有生成的变量使用的总内存,只花了大约10GB。我不知道 R 将剩余的内存带到了哪里。所以我的问题是如何合理地为 R 分配内存而不爆炸我的机器?谢谢!

最佳答案

R 被解释为所见即所得(所见并不总是所得到)。正如评论中提到的,由于复制所述对象,您需要更多的内存来存储对象。此外,嵌套 for 循环除了效率低之外,可能也是一个坏主意,因为 gc 不会在最内层循环中运行。如果您有其中任何一个,我建议您尝试使用矢量化方法删除它们,或者在循环中手动调用 gc 来强制垃圾回收,但请注意,这会稍微减慢速度

简单对象所需的内存问题可以通过以下示例来说明。此代码生成一个 data.frame 对象。观察之前、之后的内存使用情况以及生成的对象大小。在调用 gc 之前会积累大量垃圾。我认为垃圾收集在 Windows 上比 *nix 系统上更有问题。我无法在 Mac OS X 上复制底部的示例,但可以在 Windows 上重复。循环和更多解释可以在 The R Inferno 中找到。第 13 页...

# Current memory usage in Mb
memory.size()
# [1] 130.61
n = 1000

# Run loop overwriting current objects
my.df <- data.frame(a=character(0), b=numeric(0))
for(i in 1:n) {
this.N <- rpois(1, 10)
my.df <- rbind(my.df, data.frame(a=sample(letters,
this.N, replace=TRUE), b=runif(this.N)))
}
# Current memory usage afterwards (in Mb)
memory.size()
# [1] 136.34

# BUT... Size of my.df
print( object.size( my.df ) , units = "Mb" )
0.1 Mb

关于R 内存问题与 memory.limit(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14352565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com