У меня огромный список объектов ECDF.
Аналогично:
vals <- rnorm(10000)
x <- ecdf(vals)
ecdfList <- lapply(1:10000, function(i) ecdf(vals))
save(ecdfList, file='mylist.rda')
class(ecdfList[[1]])
[1] "ecdf" "stepfun" "function"
Давайте выйдем из R сервера и начнем все сначала.
q()
> R (I'm on a server running ubuntu, R 3.4.4)
Теперь проблема в том, что при запуске с новым env,
загрузка и удаление ecdfList не освобождает память.
load('mylist.rda')
rm(ecdfList)
gc()
top и free по-прежнему показывают память, используемую R.
Так что я подумал, что буду умнее и загружу их в новую среду.
e = new.env()
load('mylist.rda', envir=e)
rm(e)
gc()
Но происходит то же самое. top и free по-прежнему показывают память как используемую.
Где эти экдф объекты? Как я могу безопасно удалить этот список ecdf из памяти?
Может быть, память просто удерживается ... на всякий случай ... R? Это не происходит с другими объектами данных.
Вот пример просмотра памяти с помощью «free».
Из Rstudio я создам список векторов, а затем освобождаю их, проверяя память, использованную до и после.
dave@yoga:~$ free
total used free shared
available Mem: 16166812 1548680 11725452 932416
Затем составьте список векторов.
x <- lapply(1:10000, function(a) rnorm(n=10000))
Затем проверьте свободную память.
davidgibbs@gibbs-yoga:~$ free
total used free shared
available Mem: 16166812 2330068 10954372 921956
Изнутри Rstudio, rm векторы.
rm(x)
gc()
Проверьте память еще раз,
davidgibbs@gibbs-yoga:~$ free
total used free shared
available Mem: 16166812 1523252 11750620 932528
ОК, значит, память возвращается.
Теперь мы попробуем это со списком ECDF.
# already saved the list as above
e = new.env()
open('mylist.rda', envir=e)
и проверить память
dave@yoga:~$ free
total used free shared
Mem: 16166812 1752808 10213168 1166136
e <- new.env()
load('ecdflist.rda', envir = e)
И мы проверим память
dave@yoga:~$ free
total used free shared
Mem: 16166812 3365536 8667616 1096236
Теперь мы посмотрим на это окружение.
rm(e)
gc()
Окончательная проверка памяти.
dave@yoga:~$ free
total used free shared
available Mem: 16166812 3321584 8726964
И все еще используется, пока мы не сбросим R.
Спасибо!
-dave