代码之家  ›  专栏  ›  技术社区  ›  Neal Barsch

RDATA文件中包含的对象,如果它们还不存在

  •  0
  • Neal Barsch  · 技术社区  · 6 年前

    问题:只有当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
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Neal Barsch    6 年前

    根据评论建议,我找到了一个相当干净的函数:

     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