为了账号安全,请及时绑定邮箱和手机立即绑定

使用gc()命令强制垃圾收集在R中运行

使用gc()命令强制垃圾收集在R中运行

ibeautiful 2019-12-20 10:13:59
我定期草率地编程。好的,我一直都在草率地编写程序,但有时会以内存不足错误的形式赶上我。我开始练习一些纪律,用rm()命令删除对象,情况会变得更好。我在网上看到有关gc()在删除大数据对象后是否应显式调用的混合消息。有人说R返回内存错误之前它将运行,gc()而另一些人则说手动强制gc是一个好主意。gc()为了确保最大的内存可用性,是否应该在删除大对象之后运行?
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

“大概。” 我也这样做,甚至经常像


cleanMem <- function(n=10) { for (i in 1:n) gc() }

但是,以我的经验,这并不能使记忆恢复到原始状态。


因此,我通常要做的是将任务保留在脚本文件中,并使用“ r”前端(在Unix上和从“ littler”软件包中)执行那些任务。Rscript是该其他OS上的替代方案。


该工作流程恰好与


统计分析和报告编写工作流

在会话中管理可用内存的技巧

我们之前在这里介绍过。


查看完整回答
反对 回复 2019-12-20
?
临摹微笑

TA贡献1982条经验 获得超2个赞

晚会晚了一点,但是:


显式调用gc将“现在”释放一些内存。...因此,如果其他进程需要内存,则可能是个好主意。例如在致电system或类似电话之前。或者,当您“完成”脚本后,R会闲置一会儿,直到下一个作业到达为止-再次如此,以便其他进程获得更多的内存。


如果您只是想让脚本运行得更快,那没关系,因为R会在需要时稍后调用它。由于正常的GC周期可能永远都不需要调用它,因此它甚至可能更慢。


...但是,例如,如果您想测量时间,通常最好在运行测试之前进行GC。这是system.time默认情况下的功能。


更新正如@DWin指出的那样,R(或C#或Java等)并不总是知道何时内存不足以及GC是否需要运行。因此,有时您可能需要执行GC来解决内存系统中的缺陷。


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 1608 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信