2011-05-31 82 views

回答

233

下面是一个简单的构造,将做到这一点,利用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" 
+8

这里所使用的技术是使用列表中删除所有的对象=为RM,它允许一个字符向量将被传递到RM而不是名称的列表。 – Spacedman 2011-05-31 16:14:00

+3

+1 for setdiff() – 2011-05-31 17:43:00

15

为了保持其名称匹配的模式中的所有对象,你可以使用grep,就像这样:

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

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

从一个函数中,RM在.GlobalEnv的所有对象,除了功能

initialize <- function(country.name) { 

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

} 
8

我刚刚花了几个小时寻找一个SIM卡的答案Ilar但略有不同的问题 - 我需要能够删除R中的所有对象(包括函数),除了少数矢量。要做到这一点

方式一:

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

在哪里,我想保持载体被命名为“A”和“C”。

希望这可以帮助任何人寻找相同的解决方案!

+5

这也应该可以,'rm(list = setdiff(ls(),c(“a”,“c”)))',对不对?看@安德里的答案。 – hplieninger 2014-04-29 10:44:26

31

我觉得另一种选择是RStudio打开工作区,然后在环境右上方更改列表格(如下图所示)。然后勾选要清除的对象,最后点击清除。

enter image description here

+0

这是明显的赢家。 – Seanosapien 2017-06-14 18:37:13

+0

同样,单击名称框,选择所有文件,然后取消选择要保留的所有文件。 – Stephen 2017-12-27 15:18:50

3

这需要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" 
+0

哇,看起来很危险!有没有一种方法来测试在shell中匹配la“echo”的模式? – KennyPeanuts 2014-12-11 11:57:02

+1

我想'rm'函数应该总是小心使用(在shell中更是如此!)。请参阅我的编辑以获得对您问题的回答。 – 2014-12-11 13:29:59

+0

感谢您的编辑。太棒了! – KennyPeanuts 2014-12-11 15:43:06

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

@Rahul Premraj的副本[回复](http://stackoverflow.com/a/7205040/2563804)。 – hplieninger 2017-03-28 14:03:43

0

假设你要删除的每个对象除了DF从环境:

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

,让我们觉得在不同的方式,如果我们想删除一个组? 试试这个,

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

我个人不喜欢我的屏幕上太多的表,变量,但我不能避免使用它们。所以我以“xxx”开头的临时事件,所以我可以删除它们不再使用后。

-4

下面将从您的控制台

rm(list = ls()) 
+3

首先,这不是被问到的。其次,前面的答案已经涵盖了在R中实现这一点的所有可能的方法。非常欢迎您帮助有新问题的其他用户。这个问题已经在6年前解决了,而且这个解决方案今天仍然存在。 – 2017-04-04 11:32:33

相关问题