2012-08-01 125 views
110

我正在使用RStudio,我想從工作空間中刪除一些數據。我知道「全部清除」按鈕將刪除所有數據。但是,我想刪除某些數據。從工作空間中刪除對象/數據

例如,我有在數據段,這些數據幀:

data 
data_1 
data_2 
data_3 

我想刪除「_1」,「數據2」,和「data_3」,同時保持「數據」。發生這種情況是因爲我讀取了data_1,data_2和data_3,然後合併它們以創建「數據」。這些都是大文件,所以我想刪除它們以釋放一些空間。

我也試過data_1 <- data_2 <- data_3 <- NULL,它刪除了我認爲的數據,但仍然保留在工作區,所以它不完全是我想要做的。

我認爲這個問題必須有一個簡單的答案,但我找不到它。

回答

160

你鍵入?rm

rm(data_1, data_2, data_3) 
+32

要刪除所有變量,您可以使用'rm(list = ls())'。 – larkee 2014-10-21 22:23:46

+0

但是如何在不使用命令行的情況下使用GUI?就像在革命R – skan 2015-09-13 11:42:10

+0

如果我想刪除名稱以字母A開頭的所有變量,說'A001','A002'...'A999'。我不想輸入太多的變量名稱。謝謝! – user3768495 2015-09-22 16:04:05

51

一個有用的方法,以消除一整套命名相似的對象找到了答案:

rm(list = ls()[grep("^tmp", ls())]) 

從而消除了他的名字開始的所有對象字符串「tmp」。

編輯:繼GSEE的評論,使得利用pattern說法:

rm(list = ls(pattern = "^tmp")) 

編輯:回答拉斐爾評論,一個只保留對象的子集的方法是命名要與一個保留數據具體模式。例如,如果你想刪除他的名字不paper開始你就發出以下命令中的所有對象:

rm(list = grep("^paper", ls(), value = TRUE, invert = TRUE)) 
+5

'ls'接受'pattern'參數,所以你可以簡化爲' rm(list = ls(pattern =「^ tmp」))' – GSee 2012-08-25 13:52:38

+1

另外,查看當'grep'使用'value = TRUE'時會發生什麼......可以節省一些輸入。 – GSee 2012-08-25 13:57:23

+0

嗨,有沒有辦法保留少量數據並刪除其他數據(數量較多)?歡呼 – Rafael 2013-07-06 13:56:26

2

要清除所有數據:

點擊Misc>Remove all objects

你很好走。

要清除控制檯:

點擊edit>Clear console

不需要任何代碼。

+0

雖然我不得不做'會議>清除工作區...'。 – 2016-01-28 15:36:15

+0

'你'很好走....有多難 – Dan 2017-08-31 11:47:43

14

下面的命令做

rm(list=ls(all=TRUE)) 
+2

這將刪除工作區中的所有內容,而不僅僅是'data1','data2'和'data3'(即'data'也將被刪除)。如果這就是你想要的,那麼很好...... – Phil 2015-06-04 09:57:36

+1

如果只想刪除全球環境中的數據,而不是函數,值或其他對象呢? – 2015-08-02 23:35:19

4

只需要使用下面的命令

remove(list=c("data_1", "data_2", "data_3")) 
2
paste0("data_",seq(1,3,1)) 
# makes multiple data.frame names with sequential number 
rm(list=paste0("data_",seq(1,3,1)) 
# above code removes data_1~data_3 
2

如果你只是想刪除一組變量中的一個,那麼你可以創建一個列表,只保留你需要的變量。 rm函數可以用來刪除除「數據」以外的所有變量。下面是該腳本:

0->data 
1->data_1 
2->data_2 
3->data_3 
#check variables in workspace 
ls() 
rm(list=setdiff(ls(), "data")) 
#check remaining variables in workspace after deletion 
ls() 

#note: if you just use rm(list) then R will attempt to remove the "list" variable. 
list=setdiff(ls(), "data") 
rm(list) 
ls() 
1

你可以用它來找到使用部分名稱的對象apropos功能。

rm(list = apropos("data_")) 
+0

歡迎來到Stack Overflow! :)我剛剛編輯了一些小的格式更改以獲取代碼突出顯示工作的帖子。查看https://stackoverflow.com/editing-help瞭解格式化工作的更多信息。 – CullenJ 2017-10-27 21:03:12

1

如果您使用RStudio,請從未使用rm(list = ls())方法考慮!*相反,你應該建立自己的工作流程經常周圍採用Ctrl + Shift + F10快捷鍵重新啓動R對話。這是對當前用戶定義的變量集合進行覈查以及清除已加載的軟件包,設備等的最快方法。採用這種習慣將顯着提高您的工作的可重複性。

請參閱this excellent thread關於Rstudio社區(h/t @ kierisi)進行更徹底的討論(主要要點已被我已經陳述過)。

我必須承認我自己的頭幾年的R編碼特色腳本後腳本開始rm「詭計」 - 我寫這個答案作爲任何人可能開始他們的R的職業生涯的建議。

*當然有合法的用途 - 很像attach - 但在晚些時候,用戶將會更好地服務於(IMO)穿越該橋。