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

Posted

技术标签:

【中文标题】试图将 R 环境中的所有内容保存到磁盘【英文标题】:Trying to save everything in R environment to disk 【发布时间】: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 是短暂的...... 我邀请任何人扩展我的评论并将其变成完整的答案。我没有删除我的评论的计划,而且我怀疑版主也会这样做,所以我认为这不是很短暂的。 (这也不是一个好的答案,这就是为什么我留下了一个快速、有用的评论,而不是一个简短、糟糕的答案。) 【参考方案1】:

这里实际上有几个问题:

    我怀疑你想保存.GlobalEnv,而不仅仅是op 的环境。然而,对ls 的调用将列出op 的环境中的对象(当你调用ls 时,它只是i)。如果您想在.GlobalEnv 中列出对象,请致电ls(.GlobalEnv) 另外,当您调用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"

【讨论】:

以上是关于试图将 R 环境中的所有内容保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章

Java - 在没有磁盘的情况下处理内存中的文件 R/W

如何将具有文件外依赖项的 sklearn 模型保存到磁盘?

R在磁盘中保存列表

使用 PHP 将入站电子邮件附件保存到磁盘

R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)

在 Visual Studio 中调试时,我可以将一些 C/C++ 结构内容保存到磁盘吗?