【发布时间】: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 中保存一个变量,rm(list=ls()) 不会删除该变量
我认为有可能,例如安装的功能和包中的数据不会被删除。
编辑:一种可能性是仅为此 R 会话设置一个环境变量。我试过Sys.setenv(ENV_VAR = 1) 但Sys.getenv(ENV_VAR) 返回错误。
(我在 Windows 32 位,R 2.12.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')
【讨论】:
attach 的使用。请改用with。 4dpiecharts.com/2011/04/29/…
正确的答案是将变量放入新环境。一个快速而肮脏的技巧是在变量前面添加一个.,这样它就不会被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
【讨论】:
另一个选项如下:
# 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"
【讨论】: