【问题标题】:How do I clear only a few specific objects from the workspace?如何从工作区中只清除几个特定对象?
【发布时间】:2022-03-18 00:08:13
【问题描述】:

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

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

data
data_1
data_2
data_3

我想删除data_1data_2data_3,同时保留data

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

【问题讨论】:

    标签: r


    【解决方案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】:

    下面的命令就可以了

    rm(list=ls(all=TRUE))
    

    【讨论】:

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

    使用以下命令

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

    【讨论】:

      【解决方案5】:
      1. 在 RStudio 中,确保 Environment 选项卡处于 Grid(不是 List)模式。

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

      3. 点击扫帚图标。

      【讨论】:

      • 它的弹出窗口应该是“清除选定对象...”
      【解决方案6】:

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

      rm(list = apropos("data_"))
      

      【讨论】:

        【解决方案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】:
          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
          

          【讨论】:

            【解决方案9】:

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

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

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

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

            【讨论】:

              【解决方案10】:

              清除所有数据:

              点击Misc>Remove all objects

              你很高兴。

              清除控制台:

              点击edit>Clear console

              不需要任何代码。

              【讨论】:

              • 虽然我不得不这样做Session> Clear Workspace...
              【解决方案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"])
                

                【讨论】:

                  【解决方案13】:

                  也许这也有帮助

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

                  【讨论】:

                    猜你喜欢
                    • 2012-07-30
                    • 1970-01-01
                    • 2023-03-30
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-03-03
                    • 2011-09-05
                    相关资源
                    最近更新 更多