以 R 对象是否存在为条件保存它们

Saving R objects conditional on whether they exist

在分析结束时,我想保存一些 R 环境对象。但是,我重复使用这个脚本,有时有些对象不存在。我不想每次都编辑保存语句,所以我希望脚本能够适应对象不存在的情况。不过,我正在努力让它与 exist 一起使用。

save(if(exists("object1")) {object},
       if(exists("object2")) {object2},
       file = "./my_saved_environment/saved_objects.RData")

使用 save(file=...) 和一个字符向量,intersect使用您想要的变量。例如:

ls()
# [1] "airquality" "aqm"        "dat"        "mydata"    
intersect(ls(), c("mydata", "quux"))
# [1] "mydata"                                # quux does not exist

save(list = intersect(ls(), c("mydata", "quux")), file = "quux.rda")

如果我们查看 .rda 文件,这就是保存的内容:

e <- new.env(parent = emptyenv())
load("quux.rda", envir = e)
ls(envir = e)
# [1] "mydata"

您还可以形成要以编程方式保存的对象列表,也许使用 grep("^mydata.*", ls(), value=TRUE) 或类似方法。