尝试将R环境中的所有内容保存到磁盘

时间:2015-07-30 22:35:47

标签: r caching save

我需要将环境中的项目保存在R到磁盘中。我无法弄清楚为什么以下代码无效:

op <- function(){
    for(i in 1:length(ls())){
        file <- paste0(ls()[i],".Rds")
        saveRDS(file,file)
    }
}

2 个答案:

答案 0 :(得分:4)

这里有一些错误:

  1. 我怀疑您要保存.GlobalEnv,而不仅仅是op的环境。但是,对ls的调用会在op的环境中列出对象(在您调用i时仅为ls)。如果您想在.GlobalEnv中列出对象,请致电ls(.GlobalEnv)
  2. 此外,当您呼叫saveRDS时,您告诉它将存储在file中的字符串保存到存储在文件中的路径中。所以你基本上只保存路径。相反,您需要从.GlobalEnv
  3. 获取对象

    因此,正确的方法之一是:

    op <- function(){
        obj_names <- ls(.GlobalEnv)
        for(i in 1:length(obj_names){
            file <- paste0(obj_names[i],".Rds")
            saveRDS(get(obj_names[i], envir = .GlobalEnv), file)
        }
    }
    

    或者更具惯用性,

    op <- function()
        sapply(ls(.GlobalEnv), function(x) saveRDS(get(x, envir = .GlobalEnv), paste0(x, ".Rds"))
    

    如果您不介意将所有对象保存在一个文件中,save函数也可能有用。更多?save

答案 1 :(得分:0)

您编写的代码只保存一个文件列表,其名称与您的函数环境中的名称相同(即单个文件“i.rds”)。

如果您想将环境内容保存到文件中,您可能需要尝试save()save.image()功能,该功能完全符合您的要求。

有关信息,请尝试?save。这是一些代码:

   a <- 1
   b <- 2
   save(list=ls(), file="myfile.rda")
   rm(list=ls())
   load(file="myfile.rda")
   ls()

得到以下特性:

 [1] "a" "b"