我的用户不能或不想连接关系数据库,但更喜欢使用导出到 excel 文件的数据。
从这些数据库数据导出的记录集可能会变得相当大。 (我也导出到 CSV 文件)。
我的问题与这个有关: Handling java.lang.OutOfMemoryError when writing to Excel from R 。
正如这个问题的公认答案(或者更确切地说是第一条评论)中所建议的,我现在使用基于 Rcpp 的 openxlsx
包从数据库中导出一些 View 。
当导出有 ~67000 行时它有效,但它不适用于更大的数据集(~100 万行,~20 个参数,除少数日期时间外都是数字)。
openxlsx::write.xlsx(data, file = "data.2008-2016.xlsx") # 800000 rows
Error: zipping up workbook failed. Please make sure Rtools is installed or a zip application is available to R.
Try installr::install.rtools() on Windows
(我使用的是 Linux PC,并且/usr/bin/zip 可用于 R)
可以给 openxlsx 包更多内存吗?或者设置一些可调选项以更好地处理大型数据集?
对于 openxlsx,是否有类似于基于 java 的 xlsx 包的
options(java.parameters = "-Xmx1000m")
的东西?openxlsx 插图没有提到任何选项。但是 也许有一些未记录的方法或选项? (例如在保存过程中显示进度条)
在这一点上,我是这样进行的:关闭所有不需要的应用程序,重新启动 Rstudio,在全局环境中保留很少/没有大对象,查询 db,然后运行
write.xlsx()
。有了这样的“干净的石板”,它成功地将 800000 行数据集导出到 93MB-xlsx 文件。
最佳答案
你的问题不是内存。 openxlsx
需要安装 RTools 或类似工具来保存更大的 excel 文件。
我遇到了你昨天看到的同样的问题和同样的错误。以下是 Windows 安装程序的链接:
https://cran.r-project.org/bin/windows/Rtools/index.html
以下网站进一步解释了要求:
https://www.r-project.org/nosvn/pandoc/openxlsx.html
关于r - 如何在 R 中使用 openxlsx 包编写 100 万行的 Excel 文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36011959/