【问题标题】:Exporting large character vector as CSV-file in R在 R 中将大字符向量导出为 CSV 文件
【发布时间】:2016-09-01 07:12:27
【问题描述】:

我一直在寻找适合我的问题的答案,但没有找到确切或合适的答案。

我有一个大字符向量(大约 400 万个元素,大小超过 3GB)。我想将这个大字符向量输出/导出为 CSV 文件,其中每个元素代表一行。

使用write.tablewrite.csvwrite.csv2 导出此文件会导致内存分配问题。

目前,我已经尝试了RSQLite 包和data.table 包中的fwrite 函数。由于不同的原因,两者似乎都不起作用。

  • RQSLite 方法需要 +4 个小时来处理,我最终不得不将其杀死。
  • fwrite() 函数要求data.frame 作为输入。试图将大字符向量强制转换为 data.frame,我又遇到了内存问题。

有人知道解决这个问题的好方法吗?

(我在 Windows 64 位机器上,16GB RAM,500GB SSD 并运行 R 版本 3.2.5)

【问题讨论】:

  • 如果您使用的是 Windows,请查看 memory.size()
  • 如果你先使用x <- list(x); setDT(x)然后使用fwrite呢?还有内存问题?
  • 我会先尝试 @docendodiscimus 的解决方案,如果仍然有问题,您可以随时将其分解成更小的部分,在 for 循环中一次只执行 100,000 个元素.
  • @docendodiscimus:工作完美!谢谢。您为什么不将其写为答案,以便我可以将其标记为正确答案。
  • @wake_wake,太好了,我会写一个简短的答案

标签: r memory vector export export-to-csv


【解决方案1】:

如评论所述,您也许可以将您的字符向量 x 转换为 list,然后使用 data.table::setDT 将其转换为 data.table 通过引用,即无需复制.所以应该是:

x <- list(x)
library(data.table)
setDT(x)

现在您可以使用例如data.table 的新fwrite 函数来创建csv 文件。

【讨论】:

    猜你喜欢
    • 2013-06-26
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2018-11-09
    • 2017-06-09
    • 2012-11-22
    • 1970-01-01
    相关资源
    最近更新 更多