【问题标题】:Trying to save everything in R environment to disk试图将 R 环境中的所有内容保存到磁盘
【发布时间】:2015-07-30 22:35:46
【问题描述】:

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

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

【问题讨论】:

  • file 是一个字符串(包括您粘贴在其末尾的".Rds"),因此您告诉saveRDS 保存存储在file 中的字符串(不是该名称的对象减去 .Rds 部分)。
  • 很高兴有一个真正的答案,因为 cmets 是短暂的......
  • 我邀请任何人扩展我的评论并将其变成完整的答案。我没有删除我的评论的计划,而且我怀疑版主也会这样做,所以我认为这不是很短暂的。 (这也不是一个好的答案,这就是为什么我留下了一个快速、有用的评论,而不是一个简短、糟糕的答案。)

标签: r caching save


【解决方案1】:

这里实际上有几个问题:

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

所以正确的方法之一是:

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

【讨论】:

    【解决方案2】:

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

    如果您想将环境的内容保存到文件中,您可能需要尝试 save() 或 save.image() 函数,这正是您所寻找的。​​p>

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

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

    屈服:

     [1] "a" "b"
    

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 2012-09-03
      • 2010-11-29
      • 2012-05-13
      • 2012-03-24
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2012-11-02
      相关资源
      最近更新 更多