如何只清除工作区中的几个特定对象?

Posted

技术标签:

【中文标题】如何只清除工作区中的几个特定对象?【英文标题】:How do I clear only a few specific objects from the workspace? 【发布时间】:2012-07-30 12:16:07 【问题描述】:

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

例如,我在数据部分中有这些数据框:

data
data_1
data_2
data_3

我想删除data_1data_2data_3,同时保留data

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

【问题讨论】:

【参考方案1】:

输入?rm即可找到答案

rm(data_1, data_2, data_3)

【讨论】:

要删除所有变量,您可以使用rm(list=ls()) 但是如果没有命令行,如何使用 GUI 呢?就像在革命 R 如果我想删除名称以字母 A 开头的所有变量,比如“A001”、“A002”......“A999”。我不想输入这么多变量名。谢谢! 使用@mbask 的答案(就在下面):rm(list = ls()[grep("A", ls())])【参考方案2】:

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

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

【讨论】:

ls 接受 pattern 参数,因此您可以将其简化为 rm(list=ls(pattern="^tmp")) 另外,看看当你使用value=TRUEgrep时会发生什么...可以节省一些打字。 嗨,有没有办法保留一些数据并删除其他数据(大量)?干杯 嗨!我怎样才能在我的 R 环境中保留两种不同的模式?我试过“rm(list = grep("^paper" | "ObjectExample", ls(), value = TRUE, invert = TRUE))"。有人知道吗? 你应该将你的正则表达式包含在greppattern参数中:rm(list = grep("^paper|ObjectExample", ls(), value = TRUE, invert = TRUE))【参考方案3】:

清除所有数据:

点击Misc>Remove all objects

你很高兴。

清除控制台:

点击edit>Clear console

不需要任何代码。

【讨论】:

虽然我不得不这样做Session> Clear Workspace...【参考方案4】:

下面的命令就可以了

rm(list=ls(all=TRUE))

【讨论】:

这将从工作区中删除所有内容,而不仅仅是data1data2data3(即data 也将被删除)。如果这就是你想要的,那很好...... 如果只想删除全局环境中的数据,而不是函数、值或其他对象,该怎么办?【参考方案5】:

使用以下命令

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

【讨论】:

【参考方案6】:
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

【讨论】:

【参考方案7】:

如果您只想删除一组变量中的一个,那么您可以创建一个列表并只保留您需要的变量。 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()

【讨论】:

【参考方案8】:

您可以使用apropos 函数,该函数用于使用部分名称查找对象。

rm(list = apropos("data_"))

【讨论】:

【参考方案9】:

如果您使用 RStudio,请考虑永远不要使用 rm(list = ls()) 方法!* 相反,您应该围绕经常使用 Ctrl+Shift+F10 来构建您的工作流程重新启动 R 会话的快捷方式。这是消除当前用户定义变量集和清除加载的包、设备等的最快方法。采用这种习惯将显着提高工作的可重复性。

请参阅 Rstudio 社区上的this excellent thread (h/t @kierisi) 以进行更深入的讨论(主要要点已被我已经陈述过)。

我必须承认我自己最初几年的 R 编码特色脚本以rm“trick”开头的脚本——我写这个答案是为了给其他可能开始 R 职业生涯的人提供建议。

*当然,这有合法用途——就像attach——但以后越过这座桥的新用户(IMO)会得到更好的服务。

【讨论】:

【参考方案10】:

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

    勾选要从环境中移除的对象。

    点击扫帚图标。

【讨论】:

【参考方案11】:

你也可以使用 tidyverse

# to remove specific objects(s)
rm(list = ls() %>% str_subset("xxx")) 
# or to keep specific object(s)
rm(list = setdiff(ls(), ls() %>% str_subset("xxx")))

【讨论】:

【参考方案12】:

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

ls() 返回一个字符串向量,给出指定环境中对象的名称。

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

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

【讨论】:

以上是关于如何只清除工作区中的几个特定对象?的主要内容,如果未能解决你的问题,请参考以下文章

vim中的几个技巧

如何清除画布中的特定行:HTML5

如何更改 seaborn 直方图以在一天中的几个小时内工作?

单例模式在项目实战中的几个应用

单例模式在项目实战中的几个应用

如何用BAT删除文件名中特定的几个字?