Rのワークスペースから1つを除くすべてのオブジェクトを削除するにはどうすればよいですか?


219

たくさんのオブジェクトを含むワークスペースがあり、1つを除いてすべて削除したいと思います。理想的には、入力する必要はありませんrm(obj.1, obj.2... obj.n)。表示することは可能 remove all objects but these onesですか?

回答:


373

以下は、それを行う単純な構成ですsetdiff

rm(list=setdiff(ls(), "x"))

そして完全な例。あなた自身のリスクでこれを実行してください-それはを除くすべての変数を削除しますx

x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"

rm(list=setdiff(ls(), "x"))

ls()
[1] "x"

8
ここで使用されている手法は、list = to rmを使用することです。これにより、名前のリストの代わりに文字ベクトルをrmに渡すことができます。
Spacedman、2011年

53

パッケージのkeep関数を使用するgdataと非常に便利です。

> ls()
[1] "a" "b" "c"

library(gdata)
> keep(a) #shows you which variables will be removed
[1] "b" "c"
> keep(a, sure = TRUE) # setting sure to TRUE removes variables b and c
> ls()
[1] "a"

私が使用してGDATAがより理にかなっているようだから、「続ける」ことを見つけて、それがすべてのことをベースR.中COMANDの複雑さを覚えておくことは簡単だ
ダリウス

47

私が思うに、別のオプションが RStudioに開いたワークスペースにあり、その後の環境(下の画像)の右上にあるグリッドにリストを変更します。次に、クリアしたいオブジェクトにチェックマークを付け、最後にクリアをクリックします。

ここに画像の説明を入力してください


3
同様に、[名前]ボックスをクリックしてすべてのファイルを選択し、保持するすべてのファイルの選択を解除します。
スティーブン

26

似ているが少し異なる質問への回答を探すのに数時間費やしただけです-少数のベクトルを除いて、R内のすべてのオブジェクト(関数を含む)を削除できる必要がありました。

これを行う1つの方法:

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

保持したいベクトルの名前は「a」と「c」です。

これが同じ解決策を探している人に役立つことを願っています!


11
これも機能するはずrm(list=setdiff(ls(), c("a", "c")))です。@Andrieの回答を参照してください。
hplieninger 14



6

これは ls()pattern、保持したくない同じパターンのオブジェクトが多数ある場合に、のオプションします。

> foo1 <- "junk"; foo2 <- "rubbish"; foo3 <- "trash"; x <- "gold"  
> ls()
[1] "foo1" "foo2" "foo3" "x"   
> # Let's check first what we want to remove
> ls(pattern = "foo")
[1] "foo1" "foo2" "foo3"
> rm(list = ls(pattern = "foo"))
> ls()
[1] "x"

おっと、それは危険なようです!シェルで「エコー」に一致するパターンをテストする方法はありますか?
DQdlM 2014

1
rm関数は常に注意して使用する必要があると思います(シェルではさらにそうです!)。あなたの質問に対する答えについては、私の編集を参照してください。
Peter Diakumis 14


3

別の方法で考えてみましょう。グループを削除したい場合はどうでしょうか。これを試して、

 rm(list=ls()[grep("xxx",ls())]) 

個人的には、画面に表示されるテーブルや変数が多すぎますが、使用するのは避けられません。そこで、一時的なものには「xxx」で始まる名前を付け、使用されなくなった後に削除できるようにします。


2

関数内から、関数を除く.GlobalEnv内のすべてのオブジェクトをrm

initialize <- function(country.name) {

  if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
    rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
  }

}

2

ファイルのリストを保持するには、以下を使用できます。

rm(list=setdiff(ls(), c("df1", "df2")))

1

これはどう?

# Removes all objects except the specified & the function itself.

rme <- function(except=NULL){
  except = ifelse(is.character(except), except, deparse(substitute(except)))
  rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
}

1

環境からdf以外のすべてのオブジェクトを削除したい場合:

rm(list = ls(pattern="[^df]"))

1
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])

-9

以下は、コンソールからすべてのオブジェクトを削除します

rm(list = ls())

4
まず第一に、これは尋ねられたものではありません。第二に、Rでそれを行うために考えられるすべての方法は、以前の回答でカバーされています。新しい質問がある他のユーザーを支援することは大歓迎です。これは6年前にすでに解決されており、その解決策は現在でも有効です。
Joris Meys 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.