Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何回收mgcv使用的内存?_R_Memory_Gam_Mgcv - Fatal编程技术网

R 如何回收mgcv使用的内存?

R 如何回收mgcv使用的内存?,r,memory,gam,mgcv,R,Memory,Gam,Mgcv,我遇到一个问题,当使用R包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 t

我遇到一个问题,当使用R包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个GAMs,并使用

fits <- lapply(1:10, function(j) {gam(Y~te(X1,X2,k=10)+te(X2,X3,k=10), data=myData)})
gc()
object.size(fits)
请注意,我只创建了一个对象(fits),但内存使用量是该对象大小的三倍。最终,随着我安装更多型号,R完全耗尽了内存。我一直在做的是保存到磁盘

saveRDS(fits, "fits", refhook=function(...) {"dummy"})
然后启动新会话并重新加载

library(mgcv) #for gam
fits <- readRDS("fits", refhook=function(...) {.GlobalEnv})
gc()

是否有任何方法可以在不需要保存到磁盘、启动新会话,然后从磁盘加载的情况下重新声明内存?

问题在于
lappy()
在返回之前出现无法分配更多内存错误?您是否尝试过将此作为for循环运行?当我用
mgcv::gam()
做这类事情时,我使用
for
循环,将
I
th模型分配给object
foo
,这样每次迭代都会覆盖它,在迭代期间将每个模型写入磁盘,并以这种方式循环20+GB的模型。假设您对
.rds
文件使用一致的命名约定,那么您可以编写一个脚本,依次加载每个模型并使用它/提取您想要的内容。
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