我有一个有很多对象的工作空间,我想删除所有的,但只有一个。理想情况下,我希望避免键入rm(obj。1、obj.2……obj.n)。是否有可能指示删除除这些对象之外的所有对象?


当前回答

假设你想从环境中删除除df之外的所有对象:

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

其他回答

要保留所有名称与模式匹配的对象,可以使用grep,如下所示:

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)

这利用了ls()的模式选项,在这种情况下,你有很多具有相同模式的对象,而你不想保留:

> 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"

假设你想从环境中删除除df之外的所有对象:

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

下面是一个简单的构造,通过使用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"

我刚刚花了几个小时来寻找一个类似但略有不同的问题的答案——我需要能够删除R中的所有对象(包括函数),除了少数向量。

一种方法是:

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

我想保留的向量命名为a和c。

希望这能帮助寻找同样解决方案的人!