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

Rob*_*ert 3 caching r save

我需要将 R 环境中的项目保存到磁盘。我不明白为什么下面的代码不起作用:

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

Rom*_*kyi 5

这里实际上有一些错误:

  1. 我怀疑你想拯救的.GlobalEnv不仅仅是op环境。但是,对 的调用ls将列出op环境中的对象(仅i在您调用时ls)。如果你想列出 中的对象.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)
    }
}
Run Code Online (Sandbox Code Playgroud)

或者更惯用一点,

op <- function()
    sapply(ls(.GlobalEnv), function(x) saveRDS(get(x, envir = .GlobalEnv), paste0(x, ".Rds"))
Run Code Online (Sandbox Code Playgroud)

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