R语言中使用循环保存数据框为.Rda文件及加载的异常问题求助
循环保存R数据框的问题排查与解决
你遇到的问题核心在于保存循环里没有正确引用到目标数据框对象,下面来拆解原因并给出修正方案:
问题根源分析
你原来的保存循环中:
DFs <- list("sets", "themes", "parts") for(x in 1:length(DFs)){ dx <- paste(DFs[[x]], ".Rda", sep = "") save(x, file = dx) }
这里的x是循环的索引值(依次为1、2、3),save(x, ...)实际保存的是这个索引变量,而非你想要的sets/themes/parts数据框。最后一次循环时x=3,所以每个生成的.Rda文件里都只存了数值3,加载后自然只会得到名为x、值为3L的对象。
修正后的保存循环方案
有两种常用的正确写法,任选其一即可:
方案1:用get()获取字符串对应的对象
通过字符串名称获取实际的数据框对象,再传入save():
DFs <- c("sets", "themes", "parts") # 用向量更简洁 for(df_name in DFs){ dx <- paste0(df_name, ".Rda") # paste0是paste(sep="")的简写 save(get(df_name), file = dx) }
方案2:直接存储对象列表(更稳妥)
把数据框对象本身放进列表,利用save()的list参数指定要保存的对象名称:
# 构建包含数据框对象的命名列表 DFs <- list(sets = sets, themes = themes, parts = parts) for(df_name in names(DFs)){ dx <- paste0(df_name, ".Rda") save(list = df_name, file = dx) }
验证加载
你的加载循环是完全有效的,只要用上面的正确方式保存文件,执行以下代码就能正常恢复三个数据框:
rm(list=ls()) DFs <- c("sets.Rda", "themes.Rda", "parts.Rda") for(DF in DFs) { load(DF) } # 验证:查看工作区对象 ls() # 应该返回 "sets" "themes" "parts"
内容的提问来源于stack exchange,提问作者bricevk
相关产品推荐
相关产品推荐

