如何仅从工作空间中清除一些特定对象?


161

我想从工作区中删除一些数据。我知道“全部清除”按钮将删除所有数据。但是,我只想删除某些数据。

例如,我在数据部分中具有以下数据帧:

data
data_1
data_2
data_3

我想删除data_1data_2data_3同时保留data

我尝试过data_1 <- data_2 <- data_3 <- NULL,它确实删除了数据(我认为),但仍将其保留在工作区中,因此它并不是我想要的全部功能。

Answers:


246

您将通过键入找到答案 ?rm

rm(data_1, data_2, data_3)

44
要删除所有变量,可以使用rm(list=ls())
larkee 2014年

1
但是如何在没有命令行的情况下使用GUI?就像在转速R
SKAN

1
如果我想删除名称以字母A开头的所有变量,例如'A001','A002'....'A999',该怎么办?我不想输入太多变量名。谢谢!
user3768495

2
使用@mbask的答案(在下面): rm(list = ls()[grep("A", ls())])
流行

74

删除整套类似命名对象的有用方法:

rm(list = ls()[grep("^tmp", ls())])

从而删除名称以“ tmp”开头的所有对象。

编辑:按照Gsee的评论,使用pattern参数:

rm(list = ls(pattern = "^tmp"))

编辑:回答拉斐尔评论,仅保留对象子集的一种方法是使用特定模式命名要保留的数据。例如,如果要删除名称不以其开头的所有对象,则paper发出以下命令:

rm(list = grep("^paper", ls(), value = TRUE, invert = TRUE))

7
ls接受一个pattern论点,所以您可以简化为rm(list=ls(pattern="^tmp"))
GSee 2012年

1
另外,请查看当value=TRUEgrep...一起使用时会发生什么,可以节省一些输入。
GSee 2012年

嗨,有没有办法保留一些数据并删除其他数据(数量较大)?干杯
拉斐尔

1
嗨!我如何在R环境中保持两种不同的模式?我尝试了“ rm(list = grep(“ ^ paper” |“ ObjectExample”,ls(),value = TRUE,invert = TRUE))”。有人知道吗?
Dekike,

1
您应将正则表达式包含在以下pattern参数中greprm(list = grep("^paper|ObjectExample", ls(), value = TRUE, invert = TRUE))
mbask

15

以下命令将做

rm(list=ls(all=TRUE))

2
这将从工作区中删除的一切,并不只是data1data2data3(即data会被删除太)。如果那正是您想要的,那没关系...
Phil

2
如果只想删除全局环境中的数据而不是函数,值或其他对象,该怎么办?
Nikos Alexandris



3

如果您只想删除一组变量中的一个,则可以创建一个列表并仅保留所需的变量。rm函数可用于除去“数据”之外的所有变量。这是脚本:

0->data
1->data_1
2->data_2
3->data_3
#check variables in workspace
ls()
rm(list=setdiff(ls(), "data"))
#check remaining variables in workspace after deletion
ls()

#note: if you just use rm(list) then R will attempt to remove the "list" variable. 
list=setdiff(ls(), "data")
rm(list)
ls()

3

如果您使用的是RStudio,请考虑不要使用这种rm(list = ls())方法!*相反,您应该围绕频繁使用Ctrl+ Shift+ F10快捷键重新启动R会话来构建工作流。这是核对当前一组用户定义变量并清除加载的程序包,设备等的最快方法。采用这种习惯,可以显着提高工作的可重复性。

有关更详尽的讨论,请参见Rstudio社区(h / t @kierisi)上的该优秀帖子(主要要点已由我已经讲过的内容所捕获)。

我必须承认我自己的R编码特色脚本的头几年是一个以rm“技巧” 开头的脚本,我正在写这个答案,作为对任何可能开始R生涯的人的建议。

*当然,这样做有合理的用途-很像attach-但初次使用的用户(IMO)在以后越过桥越好。


3
  1. 在RStudio中,确保Environment选项卡处于Grid(不是List)模式。

  2. 勾选要从环境中删除的对象。

  3. 单击扫帚图标。


2
paste0("data_",seq(1,3,1)) 
# makes multiple data.frame names with sequential number
rm(list=paste0("data_",seq(1,3,1))
# above code removes data_1~data_3

1

要清除所有数据:

点击Misc>Remove all objects

太好了

要清除控制台:

点击edit>Clear console

无需任何代码。


1
虽然我必须做Session> Clear Workspace...
彼得·K。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.