RConnect内存不足

时间:2016-11-02 11:38:25

标签: java r

我正在使用RConnect写入工作簿。功能如下 我收到错误消息

  

错误:POIXMLException(Java):java.lang.reflect.InvocationTargetException

我的research[2]到目前为止主题已经说过,这基本上意味着java机器没有足够的内存(我可能错了)

这上周没有任何问题,所以我很困惑为什么它突然变成文件没有改变的问题。它似乎在Load workbook the template workbook

上轰炸

基本详情

文件大小为3MB 我的电脑有16 Gigs of memory

功能

# Export it all to Excel
export_report <- function(mydf, startRow, Offset, myoutputTemplate, myoutput, mycomments) {


  # Load workbook the template workbook
  wb <- loadWorkbook(myoutputTemplate)

  # write to the workbook the data frame
  writeWorksheet(wb, mydf, sheet= "Analysis",  
             startRow=startRow, startCol=1, header=TRUE)                

  # write the analysis
  writeWorksheet(wb, mycomments, sheet= "Analysis", header=FALSE,   
             startRow=startRow+Offset, startCol=1)   

  # Save the workbook
  saveWorkbook(wb, myoutput)

}

我无法使用open.xlsx,因为它需要RTools(我认为)而且我的IT部门安装起来很慢。

我会采取任何人可以建议的替代方案

1 个答案:

答案 0 :(得分:0)

我使用了一堆Excel库,这并不罕见。我根据经验(不是引擎盖下的代码)和对记忆的一些理解的解释如下:

Java在R之外运行,与r环境调用的大多数其他语言不同,它不会被R自动垃圾收集,因为R没有看到堆积在那里的尸体。

您的系统不会对其进行垃圾回收,因为它不是系统功能。因此,这些数据帧的多个副本会堆叠在分配给Java的内存中,并且您的脚本会变慢或崩溃。

我对此的回应是在每次加载写入和保存工作簿之后运行gc(),或者在我使用Excel库重命名或重组工作表的任何时候(在我的情况下为XLconnect)。此外,第二个您不再需要工作空间中的Java本机对象,将其删除并再次收集垃圾。即使你没有崩溃,它也会加快对较大文件的处理速度。

我知道这是一个非常非技术性的解释,但它对我和我所在部门的人们使用这些包有用。试一试。

相关问题