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

3

我需要将R语言环境中的项目保存到硬盘上。我不知道为什么以下代码无法正常工作:

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

file是一个字符串(包括你在末尾粘贴的.Rds),因此你告诉saveRDS保存存储在file中的字符串(而不是该名称对象减去.Rds部分)。 - Gregor Thomas
希望能得到一个真正的答案,因为评论是短暂的... - Mike Wise
2
我邀请任何人扩展我的评论并将其转化为完整的答案。我没有删除评论的计划,我也怀疑管理员会这样做,所以我认为它不是非常短暂的。 (作为现成的答案,它也不是一个好答案,这就是为什么我留下了一个快速、有用的评论而不是一个简短、糟糕的答案。) - Gregor Thomas
2个回答

5
这里实际上有几个问题:
  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


1

你编写的代码只保存了一个与函数环境中名称相同的文件列表(即单个文件“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"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接