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

我有一个有很多对象的工作空间,我想删除所有的,但只有一个。理想情况下,我希望避免键入rm(obj.1, obj.2... obj.n)。是否可能指示remove all objects but these ones?

195848 次浏览

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

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

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

使用gdata包中的keep函数非常方便。

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

v替换为你想保留的对象的名称

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

速溶咖啡:http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

从函数内部,rm .GlobalEnv中除函数外的所有对象

initialize <- function(country.name) {


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


}

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

一种方法是:

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

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

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

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

enter image description here

这利用了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"

这个怎么样?

# 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)
}
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()

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

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

让我们换个角度思考,如果我们想移除一个组呢? 试试这个,< / p >

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

我个人不喜欢屏幕上有太多的表格和变量,但我无法避免使用它们。所以我把临时的东西命名为“xxx”开头,这样我就可以在它不再使用后删除它们。

下面的操作将从控制台删除所有对象

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

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

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