在R

时间:2016-02-05 16:39:09

标签: r garbage-collection ff

我按如下方式运行脚本:

library(ff)
library(ffbase)

setwd("D:/My_package/Personal/R/reading")
x<-cbind(rnorm(1:100000000),rnorm(1:100000000),1:100000000)
system.time(write.csv2(x,"test.csv",row.names=FALSE))

#make ffdf object with minimal RAM overheads 
system.time(x <- read.csv2.ffdf(file="test.csv", header=TRUE,         first.rows=1000, next.rows=10000,levels=NULL))

#make increase by 5 of the column#1 of ffdf object 'x' by the chunk approach 
chunk_size<-100
m<-numeric(chunk_size)

#list of chunks
chunks <- chunk(x, length.out=chunk_size)

#FOR loop to increase column#1 by 5 
system.time(
  for(i in seq_along(chunks)){
    x[chunks[[i]],][[1]]<-x[chunks[[i]],][[1]]+5
  }
)
# output of x
print(x)

#clear RAM used
rm(list = ls(all = TRUE))
gc()

#another option to run garbage collector explicitly.
gc(reset=TRUE)

问题是我还有一些RAM没有发布,但是所有的对象和功能都已经从当前的环境中消失了。
此外,脚本的下一次运行将增加未释放的RAM部分,就像它是累积功能一样(通过Win7 64bit中的任务管理器)。

但是,如果我创建一个非ffdf对象并将其扫除,则rm()和gc()的输出将为OK。
所以我对RAM未发布的猜测与ffdf对象和ff包的细节有关。

因此,清除RAM的有效方法是退出当前的R会话并重新运行它。但它不是很方便。
我已经扫描了一堆关于内存清理的帖子,包括这一篇:
Tricks to manage the available memory in an R session
但我没有找到这种情况的明确解释和克服它的有效方法(没有重置R-session)。 我非常感谢你的评论。

0 个答案:

没有答案