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

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

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

data
data_1
data_2
data_3

我想移除 data_1data_2data_3,同时保持 data

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

513116 次浏览

输入 ?rm即可找到答案

rm(data_1, data_2, data_3)

删除一组类似命名对象的有用方法:

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

清除所有数据:

点击 Misc>Remove all objects

你可以走了。

清除控制台:

点击 edit>Clear console

不需要任何代码。

听从命令就行了

rm(list=ls(all=TRUE))

使用以下命令

remove(list=c("data_1", "data_2", "data_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

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

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

rm(list = apropos("data_"))

如果您正在使用 RStudio,请考虑 永远不要使用 rm(list = ls())方法! * ,相反,您应该围绕频繁使用 Ctrl + Shift + F10快捷方式来重新启动您的 R 会话来构建您的工作流。这是清除当前用户定义变量集 AND 以清除加载的包、设备等的最快方法。通过养成这个习惯,你的工作的可重复性将显著提高。

有关更详细的讨论,请参阅 RStudio 社区上的 这条优秀的线(h/t@kierisi)(主要内容已被我已经说过的内容所捕获)。

我必须承认,我自己最初几年的 R 编码特色脚本一个接一个的脚本开始与 rm的“技巧”——我写这个答案作为建议,任何其他人谁可能开始他们的 R 职业生涯。

* 当然这是合法的使用——就像 attach一样——但是初始用户将在以后的日子里得到更好的服务(IMO)。

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

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

  3. 点击扫帚图标。

你也可以用 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")))

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

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

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

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

也许这个也能帮上忙

remove(list = c(ls()[!ls() %in% c("what", "to", "keep", "here")] ) )