我正在使用 mboost 包中的 blackboost 函数来估计 Windows 7 64 位、8gb RAM 机器上大约 500mb 数据集的模型。在执行期间,R 几乎使用了所有可用内存。计算完成后,即使在使用 gc() 调用垃圾收集或将工作区保存并重新加载到新的 R 会话后,仍有超过 4.5gb 分配给 R。使用 .ls.objects ( 1358003 ) 我发现所有可见对象的大小约为 550mb。
gc() 的输出告诉我大部分数据都在向量单元格中,尽管我不确定这意味着什么:
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 2856967 152.6 4418719 236.0 3933533 210.1
Vcells 526859527 4019.7 610311178 4656.4 558577920 4261.7
这就是我正在做的事情:
> memory.size()
[1] 1443.99
> model <- blackboost(formula, data = mydata[mydata$var == 1,c(dv,ivs)],tree_control=ctree_control(maxdepth = 4))
...加载了一堆包...
> memory.size()
[1] 4431.85
> print(object.size(model),units="Mb")
25.7 Mb
> memory.profile()
NULL symbol pairlist closure environment promise language
1 15895 826659 20395 4234 13694 248423
special builtin char logical integer double complex
174 1572 1197774 34286 84631 42071 28
character ... any list expression bytecode externalptr
228592 1 0 79877 1 51276 2182
weakref raw S4
413 417 4385
mydata[mydata$var == 1,c(dv,ivs)] 有 139593 行和 75 列,其中大部分是因子变量和一些逻辑或数值变量。公式是以下类型的公式对象:“dv ~ var2 + var3 + .... + var73”。dv是一个变量名字符串,ivs是一个包含所有自变量 var2 ... var74 的字符串向量。
为什么要为 R 分配这么多内存?如何让 R 释放额外的内存?任何想法表示赞赏!