-->

清除R存贮器使用Rpy2(Clear R memory using Rpy2)

2019-10-30 08:45发布

我有一大堆的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的()不工作。

Answer 1:

要清洁R存贮器:

rm(list = ls())


Answer 2:

(......)

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

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

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

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

这是关于1.05Gb。

我得到的错误是:RRuntimeError:错误:无法分配规模1004.4 MB的矢量

观察到的错误很可能会发生什么或者在未指定的函数发生的事情,因为func1()或者是因为事情已经在RStudio执行和rpy2执行之间变化。



Answer 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


文章来源: Clear R memory using Rpy2
标签: python r rpy2