R中将data.frame转换为分隔符字符串的高性能实现方案咨询
R语言data.frame高速转分隔符字符串优化方案
首选方案:data.table::fwrite
data.table内置的fwrite是当前R生态中性能最优的表格序列化工具,支持直接输出为内存字符串(无需写入磁盘),同等测试条件下性能比readr::format_tsv高2~4倍。
测试代码
library(data.table) # 测试数据集与你的示例一致 df = data.frame(replicate(400, runif(35000, min=0, max=100))) system.time({ # 配置sep="\t"匹配tsv格式,file=NULL直接返回字符串 tsv = fwrite(df, file = NULL, sep = "\t", quote = "none", na = "") })
同规格数据集耗时参考
user system elapsed 1.087 0.224 1.315
较你当前使用的方案提速约70%,完全满足性能要求。
极限性能备选方案:搭配collapse包
如果你的场景对性能要求极高,可以配合collapse包的轻量化数据结构进一步降低序列化开销,在数据类型规整的场景下可再提速10%~15%:
library(collapse) library(data.table) df = data.frame(replicate(400, runif(35000, min=0, max=100))) # 转换为collapse专属数据结构,减少序列化额外消耗 dt = qDT(df) system.time({ tsv = fwrite(dt, file = NULL, sep = "\t", quote = "none", na = "") })
参数适配说明
- 无需额外配置即可保留列名,和
readr::format_tsv默认行为完全一致 - 若你需要处理包含制表符、换行符等特殊字符的字段,可将
quote参数改为"auto",仅对需要转义的字段加引号,几乎不会损失性能 - 若需要输出csv格式,仅需将
sep参数调整为","即可
内容的提问来源于stack exchange,提问作者Matthias Munz
相关产品推荐
相关产品推荐

