如何在R语言循环中通过字符串形式的对象名保存模型对象?
解决R语言中通过字符串对象名批量保存模型的问题
错误原因
你遇到的报错是因为save()函数默认需要直接传入对象名,而非字符串形式的对象名称。当你传入objNames[i](比如"mod1")时,R会尝试寻找一个名为"mod1"的对象(带引号的名称),而非实际存在的mod1对象,因此报错“object not found”。
解决方案
下面提供两种可行的批量保存方法,推荐第一种更简洁的方式:
方法1:利用save()的list参数(推荐)
save()函数的list参数专门用于接收字符串形式的对象名称列表,直接在循环中使用该参数即可:
# 示例模型 mod1 <- lm(Sepal.Length ~ Species, data = iris) mod2 <- lm(Sepal.Width ~ Species, data = iris) # 对象名称列表 objNames <- c("mod1", "mod2") # 批量保存 for(obj in objNames) { save(list = obj, file = paste0(obj, ".RData")) }
方法2:通过get()获取对象后保存
先用get()根据字符串名称获取对应的对象,再传入save():
for(obj in objNames) { model <- get(obj) save(model, file = paste0(obj, ".RData")) }
进阶:自动筛选brms模型对象
如果你想自动识别工作区中所有的brms模型(避免手动编写对象名称列表),可以结合ls()和inherits()筛选:
# 筛选所有brmsfit类的对象名称 brms_model_names <- ls()[sapply(ls(), function(x) inherits(get(x), "brmsfit"))] # 批量保存所有brms模型 for(obj in brms_model_names) { save(list = obj, file = paste0(obj, ".RData")) }
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

