Не вся RAM освобождается после gc() после использования объекта ffdf в R
Я запускаю скрипт следующим образом:
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)
Проблема в том, что у меня все еще осталось некоторое количество оперативной памяти, но все объекты и функции были удалены из текущей среды.
Более того, следующий запуск скрипта увеличит часть невыпущенной оперативной памяти, как если бы это была накопительная функция (диспетчером задач в Win7 64bit).
Однако, если я сделаю объект не-ffdf и смету его, вывод rm() и gc() будет в порядке.
Поэтому мое предположение о невыпущенной оперативной памяти связано со спецификой объектов ffdf и пакета ff.
Таким образом, эффективный способ очистки ОЗУ - выйти из текущего сеанса R и снова запустить его. но это не очень удобно.
Я отсканировал кучу сообщений об очистке памяти, включая этот:
Трюки для управления доступной памятью в сеансе R
Но я не нашел четких объяснений такой ситуации и эффективных способов ее преодоления (без перезагрузки R-сессии). Буду очень признателен за ваши комментарии.