首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xlConnect R内存的使用

xlConnect R内存的使用
EN

Stack Overflow用户
提问于 2012-08-01 20:21:11
回答 1查看 3.1K关注 0票数 2

在R中,我遇到了使用XLConnect (Mirai解决方案)的JVM内存问题。

使用loadWorkbookreadWorksheetFromFile可以很好地将数据加载到R中,但是更大的数据(数据帧约为3MB)在使用任何导出函数(writeNamedRegionwriteWorksheetToFile等)导出过程中写入JVM时会被卡住,而R将停止响应。

我已经使用options(java.parameters = "-Xmx1500m")重置了java参数,这增加了我能够导出到Excel的数据帧的大小,但是R仍然慢在1MB左右,不能工作在3MB左右。

我在64位Windows 7系统上使用32位Office软件,32位Java在一台有8GB内存的机器上运行。与JVM中大约750 MB的空闲内存相比,3MB似乎不太大,该内存应该在导出开始时就存在(使用xlcMemoryReport检查)。

想法?

EN

回答 1

Stack Overflow用户

发布于 2012-08-02 15:01:41

考虑到3MB的引用值,我的结论是,您正在尝试编写一个data.frame,其数值变量为维度10列x40k行(或可比较的);这样一个data.frame的object.size结果大约为x。3.2MB)。

根据您试图编写xls (BIFF8)或xlsx (OOXML)文件的情况,内存需求可能会有很大的不同。原因是xlsx文档实际上是压缩的XML文件,Apache (它是XLConnect使用的底层Java )使用xmlbean来操作这些文件--这可能是相当大的内存强度。另一方面,BIFF8是一种二进制数据格式,需要更少的内存。

您应该能够将前面提到的维度的data.frame写入具有最大值的xlsx文档。堆大小为1024米,即对我来说很好:

代码语言:javascript
复制
options(java.parameters = "-Xmx1024m") # required BEFORE any JVM is initialized in R
require(XLConnect)
tmp = as.data.frame(matrix(rnorm(4e5), ncol = 10))
writeWorksheetToFile(tmp, file = "test.xlsx", sheet = "test")

..。使用R2.15.1 32位与RStudio,XLConnect 0.2-0和JRE 1.6.0_25 (运行在32位Windows与4GB内存)。

对于那些对Apache方面对内存使用的更深入讨论感兴趣的人,有以下讨论:http://apache-poi.1045710.n5.nabble.com/HSSF-and-XSSF-memory-usage-some-numbers-td4312784.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11766981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档