R:加快将巨大的data.frame写入文本文件?

时间:2015-07-12 23:09:47

标签: r dataframe

数据帧为15k行×200k列。这是我第一次尝试将其写入TSV文件时,我很惊讶地看到我的代码有多慢。这需要三天时间,仍然在运行。这是无法接受的。我可以使用哪些技术来缩短写作时间?

我知道在R对象中写出很快,但是我必须将这些数据发送给不使用R的另一个人。因此我们可以使用的通用格式是纯文本文件。

确认

我确认来自write_csv包的readr确实比基本write.table函数更快地写入我的文件。但是,它不允许我指定我想要的分隔符,所以它不适合我的情况。我最终使用了这个技巧:首先我预处理我的巨大数据框到这样的字符向量:

forwriteout <- apply(mydf, 1, function(x){paste(x, collapse = "\t")})

然后我用forwriteout基函数写出write。这几乎和write_csv一样快。请参阅下面的基准。

                     expr       min        lq      mean    median        uq
        pasteandwrite  281.8968  283.4586  288.5968  289.2780  292.2049
     normalwritetable 1973.7250 1981.6122 1999.1016 1997.5792 2014.2397
 usewritecsvfromreadr  201.6592  202.6115  215.2030  216.4946  226.1103
       max neval
  295.6102    10
 2028.3227    10
  229.3069    10

1 个答案:

答案 0 :(得分:2)

许多人使用write.csv()写入flatfile。但是,有一个相对较新的名为“readr”的库,可以更快地读/写。

http://cran.r-project.org/web/packages/readr/readr.pdf

  

这大约是write.csv的两倍,而且从不写行名。

在那里,我把你降到了1.5天。 (并且还在运行)

其他技巧

  • 只写你需要的数据:所以row.names是显而易见的。
  • 使用round()将任何数字字段舍入到您需要的最小小数位数。
  • 基准。尝试将1%的数据写入磁盘。时间,尝试我提到的一些技巧或包,并再次计时,看看哪些有效。