【问题标题】:Clear R memory using Rpy2使用 Rpy2 清除 R 内存
【发布时间】:2017-11-20 19:32:57
【问题描述】:

我有一堆需要通过 python 调用的 R 函数。但是,当我尝试分配一个大矩阵时,我遇到了内存错误。相同的功能在同一台计算机上的 RStudio 上运行良好。这是一个崩溃的代码块:

#python:
import rpy2.robjects as ro 
import gc
gc.collect()
ro.r.source("calibration_functions.R")
result1 = ro.r.func1()  #Does some calculations, works fine.
result2 = ro.r.func2(result1) #Crashes at this step

#R code:
func2 <- function(result1){
  preds_mat = matrix(data=NA, nrow = 263310, ncol = 1000)
  # do something...
  return(preds_mat)
}

我得到的错误是: RRuntimeError:错误:无法分配大小为 1004.4 Mb 的向量

如何清理 R 内存? gc() 或 gc.collect() 不起作用。

【问题讨论】:

  • gc() 不起作用是什么意思?为我工作。

标签: python r rpy2


【解决方案1】:

清理 R 内存:

rm(list = ls())

【讨论】:

    【解决方案2】:

    (...)

    相同的功能在同一台计算机上的 RStudio 上运行良好。

    可能是相同的功能,但可能与其他应用程序的内存使用不同。

    您的 R 函数 func2() 返回以下对象大小:

    > object.size(func2(1))
    1053240200 bytes
    

    这大约是 1.05Gb。

    我得到的错误是:RRuntimeError: Error: cannot allocate vector of size 1004.4 Mb

    观察到的错误可能是由于未指定的函数 func1() 中发生的事情,或者是因为在 RStudio 中的执行和 rpy2 中的执行之间发生了一些变化。

    【讨论】:

      【解决方案3】:

      我通常通过分配更多内存来处理这个问题

      from rpy2 import robjects
      R = robjects.r
      
      
      R('memory.limit()')
      R('memory.limit(size = 10000)') ## in MB
      R('memory.limit()')
      
      …
      R('gc()')## trigger garbage collection
      

      【讨论】:

        猜你喜欢
        • 2011-07-09
        • 2014-01-15
        • 2021-01-13
        • 1970-01-01
        • 2020-02-24
        • 1970-01-01
        • 2013-02-02
        • 2012-10-14
        • 1970-01-01
        相关资源
        最近更新 更多