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

时间:2011-05-31 15:39:13

标签: r

我有一个包含大量对象的工作区,我想除去一个以外的所有对象。理想情况下,我希望避免输入rm(obj.1, obj.2... obj.n)。是否可以指出remove all objects but these ones

15 个答案:

答案 0 :(得分:317)

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

答案 1 :(得分:45)

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

答案 2 :(得分:40)

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

enter image description here

答案 3 :(得分:16)

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

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

答案 4 :(得分:15)

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

一种方法:

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

我要保留的向量名为“a”和“c”。

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

答案 5 :(得分:13)

v替换为您要保留的对象的名称

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

帽子提示:http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

答案 6 :(得分:4)

这利用了ls()的{​​{1}}选项,如果你有很多具有相同模式但你不想保留的对象:

pattern

答案 7 :(得分:2)

require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()

答案 8 :(得分:1)

在函数中,除了函数

之外,还有.GlobalEnv中的所有对象
initialize <- function(country.name) {

  if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
    rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
  }

}

答案 9 :(得分:1)

让我们以不同的方式思考,如果我们想要删除一个群体怎么办? 试试这个,

 rm(list=ls()[grep("xxx",ls())]) 

我个人不喜欢屏幕上有太多的表,变量,但我无法避免使用它们。所以我将以“xxx”开头的临时内容命名为,所以我可以在不再使用后将其删除。

答案 10 :(得分:1)

要保留文件的列表,可以使用:

rm(list=setdiff(ls(), c("df1", "df2")))

答案 11 :(得分:0)

这个怎么样?

# Removes all objects except the specified & the function itself.

rme <- function(except=NULL){
  except = ifelse(is.character(except), except, deparse(substitute(except)))
  rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
}

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])

答案 14 :(得分:-8)

以下内容将从控制台中删除所有对象

rm(list = ls())