随着循环的进行,我的内存和速度都不足。如果我将gc()
紧接在write.csv()之后放在循环中,那将是正确的并且有帮助吗?
循环我有:
for(i in seq_along(x) {
....
....
write.csv(x, file=paste("C:/....",i,".csv",sep=""))
}
需要时会自动调用垃圾收集器。使用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] 删除。
我来说两句