gc()和rm()之间的区别是什么

我正在使用调用rm(list=ls())来定期清理R中的内存。
之后我需要调用垃圾回收器gc()吗?

这两个函数有什么区别? gc()对某些variables调用rm()吗?

首先,需要注意的是,两者非常不同,因为gc不会删除任何您仍在使用的variables – 它只会释放您无法访问的variables的内存(不pipe是使用rm()还是使用rm()比如说,在一个已经返回的函数中创build)。 运行gc()永远不会让你失去variables。

调用rm()之后是否应该调用gc()的问题是一个很好的问题。 gc的文档有助于说明:

gc的调用导致垃圾收集发生。 这也会在没有用户干预的情况下自动发生,调用gc的主要目的是报告内存使用情况。

但是,在移除大对象后调用gc会很有用,因为这可能会提示R将内存返回给操作系统。

所以答案是可以很好地调用gc() (至less不能伤害),即使它可能会被触发(如果不是马上就会很快)。

我个人喜欢在循环中包含gc() ,以便在循环开始填充可用空间时释放一些RAM。 就像是

 for(i in 1:1000){ res[[i]] = some operation gc() }