rm( ) 除特定对象外的所有内容

rm( ) everything except specific object

有人知道如何删除 R 中除一个对象以外的所有内容吗?通常,要删除我编写的所有代码:

rm(list=ls())

所以我尝试了:

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

但是没用。

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"

虽然很久以前就有人问过。我的回答将来可能会帮助其他人, 假设您想从环境中删除除 obj1obj2

之外的所有内容
x<- which(ls()=="obj1"|ls()=="obj2")
ls1<- ls()[-x]
rm(list = ls1)

我这样做的方式与其他人几乎相同,但我通常倾向于使用逻辑索引...

对于单个对象,使用逻辑索引

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

或者这适用于多个对象,即使它 returns 一条错误消息

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)