我正在使用XLConnect将Excel工作表读入R中。它工作得很好。但是,如果我重新运行该命令(例如,在更改Excel文件中的值之后),该函数将耗尽内存。
我正在阅读的文件/工作表有18列和363行数字数据。
错误消息是
Error: OutOfMemoryError (Java): Java heap space
出现在readWorksheetFromFile
来电的第二次(相同)运行中。我试图通过重复运行this example的输入调用来生成MWE,但该错误似乎不能与该文件重现。
我使用的Excel文件有许多相互关联的工作表,大约3 MB。我正在阅读的表格也与其他表格相关联,但我已设置useCachedValues = TRUE
。
在我看来,执行第一次调用后,Java内存不会被清除。然后第二个调用尝试将更多数据填充到内存中,这会导致调用失败。 是否可以在Java内存上强制执行垃圾收集?目前,唯一的解决方案是重新启动R会话,这对我的客户来说并不实用。
我知道扩展Java内存可能会解决这个问题,但这对我来说是一个笨拙的解决方案。我宁愿找到一种方法来从之前的调用中转储内存。
我还尝试使用更详细的loadWorkbook
和readWorksheet
函数。发生同样的错误。
如果您有任何其他有用的信息,请告诉我们!
答案 0 :(得分:2)
你应该看看
?xlcFreeMemory
和
?xlcMemoryReport
如果您正在进行多重运行并希望在两者之间进行清理,那么在XLConnect包文档中也会提到它。