如何从R中的工作区中删除除一个对象之外的所有对象?

DQd*_*dlM 198 r

我有一个包含大量对象的工作区,我想除去一个以外的所有对象.理想情况下,我想避免打字rm(obj.1, obj.2... obj.n).有可能表明 remove all objects but these ones吗?

And*_*rie 344

这是一个简单的构造,通过使用setdiff:

rm(list=setdiff(ls(), "x"))
Run Code Online (Sandbox Code Playgroud)

一个完整的例子.运行此风险需要您自担风险 - 它将删除所有变量,除了x:

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

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

ls()
[1] "x"
Run Code Online (Sandbox Code Playgroud)

  • 这里使用的技术是使用list = to rm,它允许将字符向量传递给rm而不是名称列表. (8认同)
  • 因此,如果想保留多个文件,则为 rm(list=setdiff(ls(), c("x", "x2")))` (5认同)

Rah*_*raj 48

使用包中的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"
Run Code Online (Sandbox Code Playgroud)


Sad*_*egh 45

我认为另一种选择是在RStudio中打开工作区,然后将列表更改为环境右上角的网格(下图).然后勾选要清除的对象,最后单击"清除".

在此输入图像描述

  • 同样,单击“名称”框,这将选择所有文件,然后取消选择要保留的所有文件。 (2认同)

小智 20

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

一种方法:

rm(list=ls()[! ls() %in% c("a","c")])
Run Code Online (Sandbox Code Playgroud)

我想要保留的向量命名为'a'和'c'.

希望这有助于任何人寻找相同的解决方案!

  • 这也应该有用,`rm(list = setdiff(ls(),c("a","c")))`,对吧?请参阅@Andrie的回答. (8认同)

Aar*_*ica 17

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

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

  • @Luis rm(list=grep("^obj", ls(), value=T, invert=T)) (2认同)

Pet*_*mis 5

如果您有许多不想保留相同模式的对象,则可以利用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"
Run Code Online (Sandbox Code Playgroud)


Pet*_*ter 5

要保留对象列表,可以使用:

rm(list=setdiff(ls(), c("df1", "df2")))
Run Code Online (Sandbox Code Playgroud)