我需要将环境中的项目保存在R到磁盘中。我无法弄清楚为什么以下代码无效:
op <- function(){
for(i in 1:length(ls())){
file <- paste0(ls()[i],".Rds")
saveRDS(file,file)
}
}
答案 0 :(得分:4)
这里有一些错误:
.GlobalEnv
,而不仅仅是op
的环境。但是,对ls
的调用会在op
的环境中列出对象(在您调用i
时仅为ls
)。如果您想在.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
答案 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"