使用R清除循环中的内存
随着循环的进行,我的内存和速度都很低。如果我将使用R清除循环中的内存,r,R,随着循环的进行,我的内存和速度都很低。如果我将gc()放在write.csv()之后的循环中,这是否正确,是否有帮助 我有: for(i in seq_along(x) { .... .... write.csv(x, file=paste("C:/....",i,".csv",sep="")) } 垃圾收集器在需要时自动调用。使用gc()调用垃圾收集器。我认为,只有在移除循环中的对象时才能使用它。然后调用垃圾收集器可能会有所帮助。引用自?gc: […]删除大型对象后调用“gc”可能会很
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)
库(微基准)
图书馆(GG2)
我想你指的是粘贴(“C:/…”,I,.csv,sep=“”)
以及x[[I]]
而不是x
。考虑提供更多关于你在循环中做什么的信息,你是在创建临时对象,然后删除它们吗?不,实际上我正在做一些刮削,这需要我在步骤中完成。因此,数据是分步骤存储的。所有这些都有效,只是想知道我是否可以在循环中释放一些内存,在每次I
存储数据之后。我不知道为什么您不能自己尝试一下并查看。不过,我的猜测是,这不会有多大帮助。