如何保存独立的 R 环境对象
Posted
技术标签:
【中文标题】如何保存独立的 R 环境对象【英文标题】:How to save a standalone R environment object 【发布时间】:2016-02-08 20:56:29 【问题描述】:我已经花费了几个小时来尝试完成这项工作,但我觉得我缺少一些简单的东西:
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】: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 您可以交替使用saveRDS
和readRDS
来保存和恢复单个对象。在这种情况下,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))
【讨论】:
谢谢! RDS 完美运行!如何将环境对象序列化为 char 向量?有一个serialize
函数 - 它返回的二进制格式是否与我从 RDS 读取文件一样?
save
、saveRDS
和 serialize
都有一个 ascii
参数。
所以如果所有参数都相同,所有三个函数都返回二进制兼容格式?
酷!感谢您的帮助和对三个选项的详细解释。以上是关于如何保存独立的 R 环境对象的主要内容,如果未能解决你的问题,请参考以下文章