如何在R中保存包含不同数据类型的嵌套列表
R 保存包含复杂对象的嵌套列表的可行方案
你需要保存的嵌套列表包含tidymodel(lm类)、tibble、ggplot这类R专属的S3类对象,优先选择R原生序列化方案,可100%保留对象属性,清理工作环境后只要存储文件保留就不会丢失数据,具体可选方案如下:
方案1:base R 原生.rda格式存储(无依赖、最通用)
不需要安装任何第三方包,支持批量存储多个R对象,所有属性完整保留:
- 保存代码:
save(你的嵌套列表变量名, file = "my_nested_list.rda") - 读取代码:
load("my_nested_list.rda")
优势:兼容性最强,不会出现跨版本属性丢失问题,适合普通体积的列表存储。读取时会直接将原列表对象加载到当前工作环境,不需要额外赋值。
方案2:base R 原生.rds格式存储(更灵活)
专门用于存储单个R对象,读取时可自定义赋值的变量名,不会和当前环境的已有变量冲突:
- 保存代码:
saveRDS(你的嵌套列表变量名, file = "my_nested_list.rds") - 读取代码:
new_list_name <- readRDS("my_nested_list.rds")
优势:无额外依赖,使用灵活,是单对象存储的首选方案。
方案3:qs 包高性能序列化(适合大体积列表)
如果你的嵌套列表体积较大(例如基于数十万行数据训练的模型、超大数据量的tibble),可以使用qs包实现更快的读写速度和更高的压缩率:
- 首次使用先安装包:
install.packages("qs") - 保存代码:
qs::qsave(你的嵌套列表变量名, file = "my_nested_list.qs") - 读取代码:
large_list <- qs::qread("my_nested_list.qs")
优势:读写速度比base R原生方案高2~10倍,压缩率提升30%以上,同样完整保留所有R对象的类属性。
避坑提示
- 不要使用
write.csv()、write_json()这类通用文本格式存储,这类格式无法识别R的自定义类属性,读取后模型、ggplot、tibble都会丢失原有功能无法正常使用。 - 存储文件建议和你的R脚本放在同一目录,读取时使用相对路径即可,避免文件路径变动导致读取失败。
内容的提问来源于stack exchange,提问作者Niall Marsay
相关产品推荐
相关产品推荐

