我定期草率地编程。好的,我一直都在草率地编写程序,但有时会以内存不足错误的形式赶上我。我开始练习一些纪律,用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上的替代方案。
该工作流程恰好与
统计分析和报告编写工作流
在会话中管理可用内存的技巧
我们之前在这里介绍过。

临摹微笑
TA贡献1982条经验 获得超2个赞
晚会晚了一点,但是:
显式调用gc将“现在”释放一些内存。...因此,如果其他进程需要内存,则可能是个好主意。例如在致电system或类似电话之前。或者,当您“完成”脚本后,R会闲置一会儿,直到下一个作业到达为止-再次如此,以便其他进程获得更多的内存。
如果您只是想让脚本运行得更快,那没关系,因为R会在需要时稍后调用它。由于正常的GC周期可能永远都不需要调用它,因此它甚至可能更慢。
...但是,例如,如果您想测量时间,通常最好在运行测试之前进行GC。这是system.time默认情况下的功能。
更新正如@DWin指出的那样,R(或C#或Java等)并不总是知道何时内存不足以及GC是否需要运行。因此,有时您可能需要执行GC来解决内存系统中的缺陷。
- 3 回答
- 0 关注
- 1722 浏览
添加回答
举报
0/150
提交
取消