删除临时环境变量并释放R中的内存

Jie*_* Wu 6 memory r

我正在从事一个通过循环重复使用临时哈希表的工作.哈希表是由R.环境变量表示的问题是,作为循环进行存储成本不断无论上涨我用来删除表什么方法(我试过rm()gc()不过也不是能够释放内存.)作为结果我不能完成一个非常长的循环,比如10M循环.它看起来像是内存泄漏问题,但我在其他地方找不到解决方案.我想问一下,完全删除环境变量并同时释放之前占用的所有内存的正确方法是什么.在此先感谢您帮我检查问题.

这是一个非常简单的例子.我使用的是Windows 8和R 3.1.0版.

> fun = function(){
    H = new.env()
    for(i in rnorm(100000)){
      H[[as.character(i)]] = rnorm(100)
    }
    rm(list=names(H), envir=H, inherits=FALSE)
    rm(H)
    gc()
  }
> 
> for(k in 1:5){
    print(k)
    fun()
    gc()
    print(memory.size(F))
  }
[1] 1
[1] 40.43
[1] 2
[1] 65.34
[1] 3
[1] 82.56
[1] 4
[1] 100.22
[1] 5
[1] 120.36
Run Code Online (Sandbox Code Playgroud)

Luk*_*ney 6

对于在计算过程中密钥变化很大的情况,R中的环境不是一个好的选择.原因是环境要求键是符号,而符号不是垃圾收集的.因此,每次运行函数都会添加到内部符号表中.安排符号被垃圾收集是一种可能性,但是需要小心,因为许多内部代码假定它们不是.另一个选择是创建更好的哈希表支持,这样环境就不必尝试为此目的而设计它们.