使用Rpy2清除R内存

时间:2017-11-20 19:32:57

标签: python r rpy2

我有一堆R函数需要通过python调用。但是,当我尝试分配一个大矩阵时,我遇到了内存错误。相同的功能在同一台计算机上的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()不起作用。

3 个答案:

答案 0 :(得分:0)

清理R内存:

rm(list = ls())

答案 1 :(得分:0)

(...)

  

在同一台计算机上,相同的功能在RStudio上正常运行。

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

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

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

这大约是1.05Gb。

  

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

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

答案 2 :(得分:0)

我通常通过分配更多的内存来解决这个问题

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