3

有人知道如何删除 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 回答
0

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

x<- which(ls()=="obj1"|ls()=="obj2")
ls1<- ls()[-x]
rm(list = ls1)
于 2018-03-04T07:03:24.353 回答