如何用R中的openxlsx包编写100万行Excel文件

时间:2016-03-15 12:55:09

标签: r memory-management rcpp openxlsx

我的用户不能或不想连接关系数据库,而是更喜欢使用导出到excel文件的数据。 从这些数据库数据导出的记录集可能会变得相当大。 (我也导出为CSV文件)。

我的问题与此问题有关:Handling java.lang.OutOfMemoryError when writing to Excel from R

根据此问题的公认(或者更确切地说是第一条评论)中的建议,我现在使用基于Rcpp的openxlsx包从数据库中导出一些视图。 当导出具有~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文件。

1 个答案:

答案 0 :(得分:5)

你的问题不在于记忆。 openxlsx需要安装RTools或类似工具来保存更大的Excel文件。

我遇到了同样的问题,而且你昨天才看到同样的错误。以下是Windows安装程序的链接:

https://cran.r-project.org/bin/windows/Rtools/index.html

以下网站进一步解释了要求:

https://www.r-project.org/nosvn/pandoc/openxlsx.html