我想在R中保存一个不会被rm(list=ls())
我认为有可能因为安装的功能和包中的数据没有被删除。
编辑:一种可能是为此R会话设置一个env变量。我尝试过Sys.setenv(ENV_VAR = 1)
,但Sys.getenv(ENV_VAR)
会返回错误。
(我在Windows 32bits,R 2.12.1上)
答案 0 :(得分:6)
首先,要获取环境变量,您需要在其周围加上引号:
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')
答案 1 :(得分:4)
正确的答案是将变量放入新环境中。一个快速而又肮脏的技巧是在变量前添加.
,以便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
答案 2 :(得分:2)
另一种选择如下:
# 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"