3

1 つのオブジェクトを除いて R のすべてを削除する方法について、誰かが考えを持っていますか? 通常、コードをすべて削除するには:

rm(list=ls())

だから私は試しました:

rm(c(list=ls()-my_object))

しかし、うまくいきませんでした。

4

3 に答える 3

7

このsetdiff()関数はセット間の差を示すので、これを使用してすべてのオブジェクト ( ls()) と保持したいオブジェクトの差を与えることができます。例えば

## create some objects
df <- data.frame()
v <- as.numeric()

# show everything in environment
objects()
# [1] "df" "v"

## or similarly
ls()
# [1] "df" "v"

## the setdiff() funciton shows the difference between two sets
setdiff(ls(), "df")
# [1] "v"

# so we can use this to remove everything except 'df'
rm(list = setdiff(ls(), "df"))
objects()
# [1] "df"
于 2016-11-16T02:21:35.650 に答える
0

私のやり方は他の人とほとんど同じですが、私は通常、論理インデックスに引き寄せられる傾向があります...

単一オブジェクトの場合、論理インデックスを使用

rm(list=ls()[ls()!= "object_I_want"])

または、エラーメッセージが返されても、これは複数のオブジェクトに対して機能します

rm(list=ls()[ls()!= c("object_I_want1", "object_I_want2")])

ワークスペースにいくつかのオブジェクトしかない場合は、数値インデックスを数えて使用できます

ls();
#returns all objects in alphabetical order
# [1] "object_I_dont_want"  "object_I_want"  "object_I_dont_want"
rm(list=ls()[-2])

技術的には ls() を使用する必要はありません。なんらかの理由で、保持したいオブジェクトの継続的な集計を保持する必要がある場合、または保持または削除したいオブジェクトのセットが既にある場合などは、次のような排他リストを使用できます*ただし、技術的には、オブジェクトもサブセット化インデックスとして使用されたままになります。

exsubset = ls()[ls()!= c("object.I.want1", "object_I_want2")];
rm(list=exsubset)
于 2018-03-18T21:05:18.770 に答える