数据帧为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
答案 0 :(得分:2)
许多人使用write.csv()写入flatfile。但是,有一个相对较新的名为“readr”的库,可以更快地读/写。
http://cran.r-project.org/web/packages/readr/readr.pdf
这大约是write.csv的两倍,而且从不写行名。
在那里,我把你降到了1.5天。 (并且还在运行)
其他技巧