2017-05-29 81 views
2

除了名爲「dd」的數據框和其他以「temp」(模式)開頭的數據框之外,我想清除我的R環境。 我已經嘗試了以下代碼的不同修改,但是我無法使其工作。任何想法非常感謝!從R環境中刪除除了特定項目和其他模式以外的所有內容

要刪除一切,除了 「DD」:

rm(list=ls()[!ls() %in% c("dd")]) 

要刪除含有 「臨時」 的一切:

rm(list = ls(pattern = "temp")) 

我想保持在開頭的環境 「DD」 和什麼「溫度」。

+2

道歉,只是更新了我的問題。 – user3262756

+2

這實際上是一個正則表達式問題。你應該在'pattern'中使用正則表達式。然而,更重要的是,爲什麼這些「臨時」對象不能很好地組合在一個列表中? – Roland

回答

1

使用正則表達式確實是這裏的關鍵。讓我們把幾個變量:

obj <- c("dd", "temp1","temmie", "atemp") 
for(i in obj) assign(i, rnorm(10)) 

給出:

> ls() 
[1] "atemp" "dd"  "i"  "obj" "temmie" "temp1" 

現在是2個步驟:首先構造一個正則表達式:

  1. 檢查是否東西開頭「溫度「或完全是」dd「。
  2. 反轉的選擇,所以它返回不匹配
  3. 返回值,而不是指數的

這與下面的代碼所做的一切:

toremove <- grep("^temp|^dd$", ls(), 
       invert = TRUE, 
       value = TRUE) 

現在,你可以簡單地:

> rm(list = c(toremove, "toremove")) 
> ls() 
[1] "dd" "temp1" 

您不應該忘記刪除對象的列表,在撥打ls()123.後生成一個。

+0

完美,非常感謝! – user3262756

0

分割線將使其更容易編寫和閱讀:

allInMem <- ls() 
toRemove <- allInMem[grep("a|c",allInMem,invert=TRUE)] 
rm(list=c(toRemove,"allInMem","toRemove")) 
0
PART 1 
a=23 
dd=45 
c=36 
d=67 
x=ls() 
x[x != "dd"]; 
a" "c" "d" 

rm(list=x[x != "dd"]) 
ls() 
[1] "dd" "x" 
rm(x) 
ls() 
[1] "dd" 

PART2 
Let temp be the pattern in name of object 

temp =23 
b=45 
c=36 
dd=67 
temp1=20 
temp2=40 
temp3=50 
x=ls() 
grepl("temp",x) 
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE 

x[x = grepl("temp",x)] 
[1] "temp" "temp1" "temp2" "temp3" 

x[x != grepl("temp",x)] 
[1] "temp" "temp1" "temp2" "temp3" "b" "c" "d" 

x 
[1] "temp" "temp1" "temp2" "temp3" "b" "c" "d" 

x[x!=x[x = grepl("temp",x)]] 
[1] "b" "c" "d" 


rm(list=x[x!=x[x = grepl("temp",x)]]) 
Warning message: 
In x != x[x = grepl("temp", x)] : 
    longer object length is not a multiple of shorter object length 
ls() 
[1] "temp" "temp1" "temp2" "temp3" "x" 
rm(x) 
ls() 
[1] "temp" "temp1" "temp2" "temp3" 


PART 3 Combining them all 

temp =23 
b=45 
c=36 
dd=67 
temp1=20 
temp2=40 
temp3=50 
x=ls() 

#USING AND CONDITION 


rm(list=x[x != "dd" & x!=x[x = grepl("temp",x)]]) 

Warning message: 
In x != x[x = grepl("temp", x)] : 
    longer object length is not a multiple of shorter object length 
> ls() 
[1] "dd" "temp" "temp1" "temp2" "temp3" 
+1

感謝您的代碼!問題是我在環境中一起使用了dd和temp文件。所以,這個解決方案並不適合。 – user3262756

+0

謝謝澄清。我創建了一個AND條件。請運行上面的代碼,讓我知道它是否工作。謝謝。 –

相關問題