加载.RData文件中包含的对象(如果尚不存在)

时间:2018-10-17 06:42:18

标签: r environment rdata

问题:仅当当前环境中不存在R对象时,才可以从RData文件中读取它们吗?

为什么:我希望能够在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

1 个答案:

答案 0 :(得分:0)

根据评论建议,我发现了一个相当干净的功能:

 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