【问题标题】:how to save a variable not removed by rm(list=ls())如何保存未被 rm(list=ls()) 删除的变量
【发布时间】:2011-08-18 04:19:27
【问题描述】:

我想在 R 中保存一个变量,rm(list=ls()) 不会删除该变量

我认为有可能,例如安装的功能和包中的数据不会被删除。

编辑:一种可能性是仅为此 R 会话设置一个环境变量。我试过Sys.setenv(ENV_VAR = 1)Sys.getenv(ENV_VAR) 返回错误。

(我在 Windows 32 位,R 2.12.1)

【问题讨论】:

    标签: r environment-variables


    【解决方案1】:

    首先,要获取环境变量,您需要在其周围加上引号:

    Sys.setenv(ENV_VAR = 1)
    Sys.getenv("ENV_VAR")
    

    其次,正如 Chase 所说,新环境是要走的路——但你也必须附上它:

    e <- new.env()
    e$foo <- 42
    attach(e, name='myvars')
    rm(list=ls()) # Remove all in global env
    foo # Still there!
    

    ...分离它:

    detach('myvars')
    

    【讨论】:

    【解决方案2】:

    正确的答案是将变量放入新环境。一个快速而肮脏的技巧是在变量前面添加一个.,这样它就不会被ls() 拾取。

    > x <- 1:10
    > x
     [1]  1  2  3  4  5  6  7  8  9 10
    > .x <- x
    > ls()
    [1] "x"
    > rm(list = ls())
    > ls()
    character(0)
    > .x
     [1]  1  2  3  4  5  6  7  8  9 10
    

    【讨论】:

      【解决方案3】:

      另一个选项如下:

      # make busy workspace
      x<-1
      y<-2
      z<-3
      
      > ls()
      [1] "x" "y" "z"
      
      # determine what to keep
      save<-"x"
      #discard the rest
      rm(list=ls()[!(ls()%in%save)])
      
      > ls()
      [1] "x"
      

      【讨论】:

      • 好主意,但我无法控制该命令。它正在做 rm(list=ls()) 就是这样
      猜你喜欢
      • 2019-04-13
      • 2011-04-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      相关资源
      最近更新 更多