gpt4 book ai didi

删除临时环境变量并释放 R 中的内存

转载 作者:行者123 更新时间:2023-12-04 09:43:27 25 4
gpt4 key购买 nike

我正在处理通过循环重复使用临时哈希表的工作。哈希表由 R 中的一个环境变量表示。 问题是,随着循环的进行,无论我使用什么方法删除表,内存成本都在不断上升(我尝试了 rm()gc() 但都无法释放内存。)因此,我无法完成一个非常长的循环,比如 10M 周期。看起来像是内存泄漏问题,但我无法在其他地方找到解决方案。我想问一下完全删除环境变量并同时释放它以前占用的所有内存的正确方法是什么。在此先感谢您帮助我检查问题。

这是一个非常简单的例子。我使用的是 Windows 8 和 R 版本 3.1.0。

> fun = function(){
H = new.env()
for(i in rnorm(100000)){
H[[as.character(i)]] = rnorm(100)
}
rm(list=names(H), envir=H, inherits=FALSE)
rm(H)
gc()
}
>
> for(k in 1:5){
print(k)
fun()
gc()
print(memory.size(F))
}
[1] 1
[1] 40.43
[1] 2
[1] 65.34
[1] 3
[1] 82.56
[1] 4
[1] 100.22
[1] 5
[1] 120.36

最佳答案

R 中的环境对于在计算过程中键可能变化很大的情况不是一个好的选择。原因是环境要求键是符号,而符号不会被垃圾收集。因此,您的函数的每次运行都会添加到内部符号表中。安排符号被垃圾收集将是一种可能性,但需要小心,因为许多内部代码假设它们不是。另一种选择是创建更好的哈希表支持,这样环境就不必尝试服务于最初设计时没有达到的目的。

关于删除临时环境变量并释放 R 中的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907459/

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