清除 R 会话分配的内存(gc()没有帮助!)[重复]
Posted
技术标签:
【中文标题】清除 R 会话分配的内存(gc()没有帮助!)[重复]【英文标题】:clear memory allocated by R session (gc() doesnt help !) [duplicate] 【发布时间】:2014-12-27 12:19:40 【问题描述】:我正在大规模进行机器学习,但由于 R 内存占用,我的计算变得如此缓慢。
我清除了我的对象,还尝试了gc()
,结果:
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 4460452 231.5 15288838 1116.6 36599071 1954.7
Vcells 29572776 349.4 324509788 2712.9 350796378 3376.4
我的任务管理器显示 R 会话仍然分配了超过 3GB 的内存并且我的计算机仍然很慢。 如何释放 R 占用的内存? (我不想重启电脑)
【问题讨论】:
内存分配不是由操作系统自己管理的吗? @Pascal,没有 R 占用所需的内存,应该在使用后释放它。但由于某些原因我不知道! 您是否退出或重新启动了 R 会话? @Roland,我想如果我重新启动会话就会解决。但实际上我不想这样做,因为我经常遇到这个问题并且不想每次都重新启动会话。 您是否在使用某些包进行并行计算? 【参考方案1】:我找到的最佳解决方案是重新启动 R 会话。
在 R 工作室ctr+shft+f10
如果你不想保存工作区
makeActiveBinding("refresh", function() system(paste0(R.home(),"/bin/i386/R")); q("no") , .GlobalEnv)
paste0(R.home(),"/bin/i386/R --no-save") #--save will save workspace
干杯。
【讨论】:
这似乎也是我唯一的选择。挺烦人的! 这不是问题的答案。也没有任何其他建议重新启动会话的答案。当然,如果您重新启动会话,所有内容都将被删除。但你不应该这样做。一旦一个对象被删除并使用 gc() 完成垃圾收集,内存应该被释放。出于某种原因,R 不能正确地做到这一点。这是一个重要的问题,应该由 R Core 团队解决。多年来一直困扰着我......【参考方案2】:您需要执行两个步骤。
首先,运行rm(list = ls())
但是,虽然它删除了 ls() 中的所有对象,但您需要重新启动 R
使用.rs.restartR()
这将有效地彻底清除内存。
【讨论】:
Error in .rs.restartR() : could not find function ".rs.restartR"
.rs.restartR()
是一种 RStudio 方法,它不适用于常规 R【参考方案3】:
正如这个答案 - https://***.com/a/8813862/2602477 - “gc 不会删除您仍在使用的任何变量 - 它只会为您不再有权访问的变量释放内存”。
您可以使用 rm 功能移除(几乎)工作环境中的所有内容:
rm(list = ls())
请注意,如果您还想删除隐藏的对象,则需要使用
rm(list = ls(all.names = TRUE))
【讨论】:
已经试过了。变化不大以上是关于清除 R 会话分配的内存(gc()没有帮助!)[重复]的主要内容,如果未能解决你的问题,请参考以下文章