【发布时间】:2011-09-05 14:41:08
【问题描述】:
我有一个包含很多对象的工作区,我想删除除一个之外的所有对象。理想情况下,我想避免输入rm(obj.1, obj.2... obj.n)。可以注明remove all objects but these ones吗?
【问题讨论】:
标签: r
我有一个包含很多对象的工作区,我想删除除一个之外的所有对象。理想情况下,我想避免输入rm(obj.1, obj.2... obj.n)。可以注明remove all objects but these ones吗?
【问题讨论】:
标签: r
这是一个简单的构造,通过使用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”。
希望这可以帮助任何寻找相同解决方案的人!
【讨论】:
rm(list=setdiff(ls(), c("a", "c"))),对吧?请参阅@Andrie 的回答。
我认为另一个选项是在 RStudio 中打开工作区,然后将列表更改为环境右上角的网格(下图)。然后勾选要清除的对象,最后单击清除。
【讨论】:
这利用了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"
【讨论】:
rm 函数应该始终小心使用(在shell 中更是如此!)。请参阅我的编辑以获取您的问题的答案。
这个怎么样?
# 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]"))
【讨论】:
让我们换个思路,如果我们想删除一个组怎么办? 试试这个,
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")))
【讨论】: