我整个周末都在享受闲暇时光,同时我的计算机在 R 中孜孜不倦地运行一系列 31 个贝叶斯模型(使用
brms
包)。我为每个模型对象分配了一个名称。当我今天早上回来时,我的工作区中有 31 个模型对象。电脑干得好!可悲的是,我在周五下午所做的“没有”做的是编写代码来“保存”每个模型对象。重新运行模型需要很长时间,并且需要相当多的代码来保存每个模型。所以我想知道是否可以通过 for 循环传递模型对象的名称来保存模型对象。下面包含简单的示例
# Two models
mod1 <- lm(Sepal.Length ~ Species, data = iris)
mod2 <- lm(Sepal.Width ~ Species, data = iris)
现在我想要为我的示例做的是通过 ls()
将工作区中的对象名称作为名称列表获取,并存储为字符串。然而,为了这个简单示例的目的,我将手动将两个模型对象名称存储为列表
objNames <- c("mod1", "mod2")
save()
函数中...
for(i in 1:length(objNames)) {
save(objNames[i],
file = paste0(objNames[i], ".RData"))
}
Error in save(objNames[i], file = paste0(objNames[i], ".RData")) :
object ‘objNames[i]’ not found
非常感谢任何帮助
您可以在此处使用
save.image
save.image(file = "Bayes_mods_31.RData")
save(list=ls(pattern = "^mod\\d+"), file = "Bayes_mods_list.RData")
或者,如果您希望将各个模型放在单独的文件中,请使用
invisible(lapply(ls(), \(mod) save(list=mod, file = paste0(mod, ".RData"))))
然后使用
load
或
readRDS
将它们加载回 R:
rm(list=ls())
load("Bayes_mods_31.RData")
ls()
# [1] "mod1" "mod2"
rm(list=ls())
load("Bayes_mods_list.RData")
ls()
[1] "mod1" "mod2"
# Load one file
rm(list=ls())
load(file="mod1.RData") # Heed warning in help page
ls()
[1] "mod1"
# Load all "*.RData" fles in the specified directory
rm(list=ls())
invisible(lapply(list.files("F:/", pattern = "^mod\\d+"), load, .GlobalEnv))
ls()
[1] "mod1" "mod2"