用R循环清除内存

马克西米利安

随着循环的进行,我的内存和速度都不足。如果我将gc()紧接在write.csv()之后放在循环中,那将是正确的并且有帮助吗?

循环我有:

for(i in seq_along(x) {
 ....
 ....
 write.csv(x, file=paste("C:/....",i,".csv",sep=""))
}
alko989

需要时会自动调用垃圾收集器。使用gc()调用垃圾收集器。我认为,只有在删除循环中的对象时才使用它。然后调用垃圾收集器可能会有所帮助。引用自?gc

“ [...删除大对象后调用'gc'很有用,因为这可能会提示R将内存返回给操作系统。”

呼叫gc()可能很耗时。我做了一点测试来检查一下:

library(microbenchmark)
library(ggplot2)
lst <- rep(list(rnorm(10000)), 30)

res <- microbenchmark(
  for(i in seq_along(lst)) {
    write.csv(lst[[i]], file="delme.csv")
    gc()
  }, 
  for(i in seq(ll)) {
    write.csv(lst[[i]], file="delme.csv")
  })

levels(res$expr) <- c("with gc()","without gc()")
autoplot(res)

在此处输入图片说明

因此,似乎gc()每次致电都不是一个好主意。当然,这很大程度上取决于您在循环中的工作。

只是预感:垃圾回收问题并没有降低您的代码速度。您可能可以优化代码的其他部分,例如使用*ply函数代替for循环有时会有所帮助。

希望能帮助到你,

亚历克斯

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章