我应该如何清除工作区中的一些特定对象?

193
我想要删除工作区中的一些数据。我知道"清除所有"按钮会删除所有数据。但是,我只想删除特定的数据。
例如,我在数据部分有这些数据框:
data
data_1
data_2
data_3
我想删除data_1data_2data_3,同时保留data
我尝试了data_1 <- data_2 <- data_3 <- NULL,这似乎确实删除了数据,但仍然将其保留在工作区中,这并不完全符合我的要求。
13个回答

279

输入?rm即可找到答案。

rm(data_1, data_2, data_3)

48
要删除所有变量,您可以使用 rm(list=ls()) - larkee
2
但是如果没有命令行,你如何使用GUI?就像在Revolution R中一样。 - skan
2
如果我想删除所有以字母A开头的变量,比如'A001'、'A002'......'A999',我不想一个个输入这么多变量名。谢谢! - user3768495
4
使用 @mbask 的答案(就在下面):rm(list = ls()[grep("A", ls())])意思是删除所有变量名中包含字母"A"的对象。 - Pop

93

一种有用的方法是删除一组命名相似的对象:

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

因此,删除所有名称以字符串“tmp”开头的对象。

编辑:根据Gsee的评论,利用pattern参数:

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

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

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

8
ls 命令接受 pattern 参数,因此您可以将其简化为 rm(list=ls(pattern="^tmp")) - GSee
1
另外,当你在 grep 中使用 value=TRUE 时会发生什么,请注意... 这可以节省一些打字时间。 - GSee
嗨,有没有办法保留一些数据并删除其他数据(大量数据)?谢谢。 - Rafael
1
你好!我该如何在R环境中保留两种不同的模式?我尝试了"rm(list = grep("^paper" | "ObjectExample", ls(), value = TRUE, invert = TRUE))"。有人知道吗? - Dekike
1
你应该将正则表达式包含在grep函数的pattern参数中:rm(list = grep("^paper|ObjectExample", ls(), value = TRUE, invert = TRUE)) - mbask

15

以下命令将执行该操作。

rm(list=ls(all=TRUE))

3
这将清空整个工作区,不仅会删除 data1data2data3,也会删除 data。如果这正是你想要的,那就没问题了... - Phil
2
如果有人想要删除数据,而不是函数、值或其他对象,例如全局环境中的数据,该怎么办? - Nikos Alexandris

14
  1. 在RStudio中,确保环境选项卡处于表格模式(而非列表模式)。

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

  3. 点击扫帚图标。


其弹出窗口应显示“清除所选对象...” - ivan866

10
你可以使用 apropos 函数来查找使用部分名称的对象。
rm(list = apropos("data_"))

10

使用以下命令

remove(list=c("data_1", "data_2", "data_3"))

4

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

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

2

添加一种方法,使用ls()和remove()

ls()返回一个字符向量,其中包含指定环境中对象的名称。

使用ls()创建要从环境中删除的对象列表,然后使用remove()将其删除。

remove(list = ls()[ls() !=  "data"])

2
如果您正在使用RStudio,请不要使用rm(list = ls())的方法!相反,您应该围绕经常使用Ctrl+Shift+F10快捷键重启您的R会话来构建您的工作流程。这是最快的方式,既可以清除当前设置的用户定义变量,也可以清除加载的软件包、设备等。通过养成这个习惯,您的工作的可重复性将显著提高。
请参见这个优秀的主题在Rstudio社区上(感谢@kierisi)进行更彻底的讨论(我已经概括了主要内容)。
我必须承认,我自己的前几年R编码涉及到一个又一个以rm“技巧”开始的脚本——我写这篇答案是为了给任何其他可能开始他们的R职业生涯的人提供建议。
*当然有合法的用途——就像attach一样——但初学者最好(在我看来)在以后的某个时候再过桥。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接