2011-05-04 73 views
4

我想保存中的R的變量,即不會因rm(list=ls())如何保存不通過RM除去變量(列表= LS())

去除我認爲這是可能的,例如安裝的功能並且包中的數據不會被刪除。

編輯:一種可能性是爲此R會話設置一個env變量。我試過Sys.setenv(ENV_VAR = 1),但是Sys.getenv(ENV_VAR)返回一個錯誤。

(我是在Windows 32位,R 2.12.1)

回答

6

首先,以獲得環境變量,你需要把它周圍的報價:

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

其次,大通表示,新的環境是要走的路 - 但你也必須重視它:

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

...並且將其卸下:

detach('myvars') 
+0

大部分同意,但我不相信使用'attach'。改爲用''來代替。 http://4dpiecharts.com/2011/04/29/friday-function-triple-bill-with-vs-within-vs-transform/ – 2011-05-04 07:31:05

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 
+0

不錯的招數!!!!! – RockScience 2011-05-04 06:12:19

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" 
+0

好主意,但我沒有控制該命令。它正在做rm(list = ls()),就是這樣 – RockScience 2011-05-05 01:07:32