5

我有一些用户不能或不想连接关系数据库,而是更喜欢使用导出到 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,R 可以使用 /usr/bin/ zip

我可以给 openxlsx 包更多的内存吗?或者设置一些可调整的选项以更好地处理大型数据集?

对于 openxlsx,是否有类似options(java.parameters = "-Xmx1000m")基于 java 的 xlsx 包的东西?

openxlsx 小插图没有提及任何选项。但也许有一些未记录的方式或选项?(例如在保存过程中显示进度条)

此时我会这样进行:关闭所有不需要的应用程序,重新启动 Rstudio,在全局环境中保留很少/没有大对象,查询 db,然后运行write.xlsx()​​. 有了这样的“干净的石板”,它成功地将 800000 行数据集导出到 93MB-xlsx 文件。

4

1 回答 1

5

你的问题不是内存。openxlsx需要安装 RTools 或类似工具来保存较大的 excel 文件。

我昨天遇到了同样的问题和同样的错误。下面是windows安装程序的链接:

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

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

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

于 2016-12-22T14:56:17.060 回答