我有大量的 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)
现在,问题是,当从一个新的环境开始时,加载和删除 ecdfList 不会释放内存。
load('mylist.rda')
rm(ecdfList)
gc()
top 和 free 仍然显示内存被 R 使用。
所以我想我会很聪明,把它们加载到一个新的环境中。
e = new.env()
load('mylist.rda', envir=e)
rm(e)
gc()
但是,同样的事情也会发生。top 和 free 仍然显示正在使用的内存。
那些 ecdf 对象在哪里?如何安全地从内存中删除该 ecdfs 列表?
也许记忆只是被保留..以防万一..被R?其他数据对象不会发生这种情况。
这是一个使用“免费”观看内存的示例。
在 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 那个环境。
rm(e)
gc()
最后的内存检查。
dave@yoga:~$ free
total used free shared
available Mem: 16166812 3321584 8726964
在我们重置 R 之前仍然在使用。
谢谢!!-戴夫