You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何快速合理地保存超大型R dataframe

解决R中超大型数据框快速保存的方案

嘿,我完全懂你这种等了好几个小时还没保存完的崩溃感!10G+、1亿行的数据框确实是个庞然大物,saveRDS在这种量级下确实力不从心。给你几个亲测有效的提速方案,你可以按需尝试:

1. 改用专为大数据优化的文件格式

这是最推荐的方案,速度提升非常明显:

  • fst包:专门针对R数据框做了高性能读写优化,是处理大数据的利器。安装后用以下代码保存,不压缩的情况下速度快到离谱,几分钟就能搞定千万级数据:
    # 先安装包
    install.packages("fst")
    # 保存数据(compress=0为无压缩,速度最快;想省空间可设为1-100)
    fst::write_fst(dfname, "dfname.fst", compress = 0)
    
    后续读取用fst::read_fst(),还支持按需加载指定列,非常灵活。
  • data.table的fwrite:如果偏好CSV格式,data.table的fwrite比原生write.table快几十倍,虽然CSV占用空间更大,但写入速度依然碾压原生方法:
    # 若未安装data.table先安装
    install.packages("data.table")
    # 保存为CSV
    data.table::fwrite(dfname, "dfname.csv")
    

2. 拆分数据框分块保存

如果不想更换文件格式,可以把大数据框拆分成多个小文件分别保存,单个小文件的写入时间会大幅缩短:

# 将数据框拆分为10个部分(可根据实际调整数量)
split_df <- split(dfname, rep(1:10, each = ceiling(nrow(dfname)/10)))
# 循环保存每个子数据框
for(i in seq_along(split_df)){
  saveRDS(split_df[[i]], file = paste0("dfname_part_", i, ".rds"), compress = FALSE)
}

后续读取时,可以用lapply加载所有子文件再合并:

parts <- lapply(1:10, function(x) readRDS(paste0("dfname_part_", x, ".rds")))
dfname <- do.call(rbind, parts)

3. 优化硬件与系统环境

  • 确保保存目标磁盘是SSD:机械硬盘的写入速度远低于SSD,这是很多人忽略的关键瓶颈;
  • 关闭后台占用磁盘IO的程序:比如正在运行的下载任务、杀毒软件扫描、云盘同步等,让R能独占更多磁盘资源。

4. 尝试save替代saveRDS(效果有限但可试)

虽然提升幅度不大,但部分场景下save处理大数据的速度会略快于saveRDS,用法如下:

save(dfname, file = "dfname.RData", compress = FALSE)

注意:后续读取需要用load(),会直接将数据框加载到当前环境中,无法像readRDS那样指定新的变量名。

内容的提问来源于stack exchange,提问作者HermitFF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 19:04:07