如何只清除工作区中的几个特定对象?
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_1
、data_2
和data_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=TRUE
和grep
时会发生什么...可以节省一些打字。
嗨,有没有办法保留一些数据并删除其他数据(大量)?干杯
嗨!我怎样才能在我的 R 环境中保留两种不同的模式?我试过“rm(list = grep("^paper" | "ObjectExample", ls(), value = TRUE, invert = TRUE))"。有人知道吗?
你应该将你的正则表达式包含在grep
的pattern
参数中: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))
【讨论】:
这将从工作区中删除所有内容,而不仅仅是data1
、data2
和data3
(即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"])
【讨论】:
以上是关于如何只清除工作区中的几个特定对象?的主要内容,如果未能解决你的问题,请参考以下文章