Не вся 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-сессии). Буду очень признателен за ваши комментарии.

0 ответов

Другие вопросы по тегам