【问题标题】:How to write 1-million-row Excel Files with openxlsx Package in R如何在 R 中使用 openxlsx 包编写 100 万行 Excel 文件
【发布时间】:2016-03-15 12:55:08
【问题描述】:

我有一些用户不能或不想连接关系数据库,而是更喜欢使用导出到 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,是否有类似 options(java.parameters = "-Xmx1000m") 的基于 java 的 xlsx 包?

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

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

【问题讨论】:

  • Excel 有行数限制...support.office.com/en-gb/article/…
  • @cory,感谢您链接到规范。我知道存在限制,但我认为限制更高;特别是我认为“工作表大小”也是“受可用内存和系统资源限制”,但这显然是一个误解。 (工作表大小限制为 1,048,576 行 x 16,384 列...)
  • Excel 2007 有 65,536 行的限制。那些日子很艰难......
  • 您可以使用options(error=recover)debug(openxlsx::write.xlsx) 来追踪确切的问题吗?
  • 您也可以尝试 Sys.setenv(R_ZIPCMD="/path_to_zip_tool") 看看是否有帮助。否则看看stat.ethz.ch/R-manual/R-devel/library/utils/html/zip.html

标签: r memory-management rcpp openxlsx


【解决方案1】:

您的问题不在于内存。 openxlsx 需要安装 RTools 或类似软件来保存更大的 excel 文件。

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

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

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

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

【讨论】:

  • 这是基于您的错误消息的正确答案。您需要与openxlsx 兼容的zip 版本。另请参阅此处。 r-project.org/nosvn/pandoc/openxlsx.html
  • 我在 Linux 上。但是 RTools 仅适用于 Windows - 我没有这么明确地说,但是当我写“(/usr/bin/zip 可用于 R)”时隐含地说 - 所以这个答案不适用于我的用例。虽然赞成
  • 感谢您的支持!想法1:有没有可能是zip工具在内存上失败了?奇怪的是,您收到“压缩工作簿失败”消息。想法 2:鉴于它适用于“干净的石板”,也许您的机器没有所需的可用内存。如果您观察您的内存使用情况,在运行您的 R 脚本时它会增加和上限吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-04
  • 2015-10-16
  • 1970-01-01
  • 2021-09-23
  • 2021-05-10
  • 2023-02-19
  • 1970-01-01
相关资源
最近更新 更多