如何保存独立的R环境对象

时间:2016-02-08 20:56:30

标签: r

我已经花了好几个小时努力完成这项工作并觉得我错过了一些简单的事情:

my_env = new.env(hash = TRUE, parent = .GlobalEnv)
my_env[['echo']] <- function(x) {x}
my_env[['echo']](123)
[1] 123
my_env$echo(123)
[1] 123
save(my_env, file = "MyEnv.RData", envir = .GlobalEnv)
loaded_env <- load(file = "MyEnv.RData",envir = .GlobalEnv)
typeof(loaded_env)
[1] "character"

当我保存整个工作区时,保存功能然后加载回来(在我关闭/打开R Studio之后)。但是在这里,save()和/或load()不起作用,加载后我的环境中只有一个字符串。

如何将单独的环境对象保存到文件中,而不是完整的工作区?然后我需要将该环境中的所有对象(my_env)加载到另一个会话中的.GlobalEnv中。

1 个答案:

答案 0 :(得分:4)

1)保存/加载您的代码确实有效,my_env已恢复;但是,load返回已还原对象的名称,而不是对象本身。对象本身作为副作用而不是通过返回值进行静默恢复。

save(my_env, file = "MyEnv.RData")
rm(my_env)
nms <- load("MyEnv.RData")
nms
## [1] "my_env"
my_env
## [1] <environment: 0x000000000bfa5c70>

2)saveRDS / readRDS 您还可以使用saveRDSreadRDS来保存和恢复单个对象。在这种情况下,readRDS返回对象本身而不是其名称,而不是load

saveRDS(my_env, file = "MyEnv.RData")
rm(my_env)
my_env <- readRDS("MyEnv.RData")
my_env
## <environment: 0x000000000bfb45f8>

3)保存/附加另一种可能性是将MyEnv.RData放在搜索路径而不是全局环境中:

save(my_env, file = "MyEnv.RData")
rm(my_env)
attach("MyEnv.RData")
my_env
## <environment: 0x000000000b072188>

注意:如果您希望将my_env的内容加载到全局环境中而不是加载my_env本身,则必须将内容复制出来:

for(el in ls(my_env)) assign(el, get(el, my_env))