加载 .RData 文件中包含的对象(如果它们尚不存在)
Posted
技术标签:
【中文标题】加载 .RData 文件中包含的对象(如果它们尚不存在)【英文标题】:Load objects contained in .RData file if they do not already exist 【发布时间】:2018-10-17 06:42:17 【问题描述】:问题:是否只有在当前环境中不存在 RData 文件时才能从 RData 文件中读取 R 对象?
为什么:我希望能够在 R 脚本的顶部设置一些变量,但加载之前脚本的已完成变量。但是,如果它们设置在顶部,我希望它们覆盖 load()
变量。
示例数据和问题:
a <- 5
b <- 2
save(a,b,file="testa.RData")
rm(a)
a <- 10
load("testa.RData")
#CURRENTLY:
> a
[1] 5
> b
[1] 2
#DESIRED RESULT:
> a
[1] 10
> b
[1] 2
【问题讨论】:
Get specific object from Rdata file的可能重复 我建议您使用saveRDS
将每个变量保存到自己的文件中。然后你可以根据exists
是否返回TRUE
来加载文件。
我将文件加载到新环境中,并通过来自@krads 建议的从 Rdata 文件中获取特定对象按名称调用。 e <- local(load("testa.RData"); environment());if(!exists("a"))a<-e$a
【参考方案1】:
根据 cmets 的建议,我想出了一个相当干净的函数:
lnexist <- function(filename)
ee <- local(load(filename); environment())
lsee <- ls(ee)
lse <- ls()
for(x in lsee)
if(!exists(x))
tempvar <<- ee[[x]]
assign(x,tempvar,envir = .GlobalEnv)
#TESTING
a<- 10
b <- 5
c <- 3
save(a,b,c,file="testc.RData")
rm(b)
c<- 8
lnexist("testc.RData")
> a
[1] 10
> b
[1] 5
> c
[1] 8
【讨论】:
以上是关于加载 .RData 文件中包含的对象(如果它们尚不存在)的主要内容,如果未能解决你的问题,请参考以下文章
小 ggplot 对象(1 mb)在保存时变成 7 GB .Rdata 对象
加载 .RData 对象时出现问题:“文件‘pathway.path.RData’有幻数‘’不推荐使用 2 之前的保存版本”