使用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
存储数据之后。我不知道为什么您不能自己尝试一下并查看。不过,我的猜测是,这不会有多大帮助。