我按如下方式运行脚本:
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)。
我非常感谢你的评论。