如何回收mgcv使用的内存?

时间:2014-07-03 19:21:23

标签: r memory gam mgcv

我遇到一个问题,当使用R package mgcv运行大量GAM时,我的内存不足。我加载库并使用以下脚本初始化一些随机数据。

library(mgcv) #for gam
set.seed(1)
n = 1000
myData = data.frame(X1=rnorm(n),
                X2=rnorm(n),
                X3=rnorm(n),
                Y=rnorm(n))
gc()

这给出了

          used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1134579 60.6    1476915 78.9  1368491 73.1
Vcells 1611179 12.3    2518261 19.3  1961928 15.0

接下来我适合10个GAM并使用

检查内存使用情况
fits <- lapply(1:10, function(j) {gam(Y~te(X1,X2,k=10)+te(X2,X3,k=10), data=myData)})
gc()
object.size(fits)

结果是

           used (Mb) gc trigger  (Mb) max used  (Mb)
Ncells  1200064 64.1    1835812  98.1  1368491  73.1
Vcells 10192307 77.8   15351293 117.2 14537510 111.0
> object.size(fits)
22871928 bytes

请注意,我只创建了一个对象(拟合),但内存使用量是此对象大小的三倍。最终R完全耗尽内存,因为我适合更多型号。我一直在做的是保存到磁盘

saveRDS(fits, "fits", refhook=function(...) {"dummy"})

然后开始新会话并重新加载

library(mgcv) #for gam
fits <- readRDS("fits", refhook=function(...) {.GlobalEnv})
gc()
瞧,瞧!记忆又回来了

          used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1139845 60.9    1835812 98.1  1368491 73.1
Vcells 4322985 33.0    4972379 38.0  4324092 33.0

有没有办法重新声明内存而无需保存到磁盘,启动新会话,然后从磁盘加载?

0 个答案:

没有答案