试图将 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 环境中的所有内容保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用magick包的image_write函数将已有图像以任何指定的格式导出保存到磁盘上(例如将原文将从png转化为jpeg)