【问题标题】:How can I remove all objects but one from the workspace in R?如何从 R 的工作区中删除除一个之外的所有对象?
【发布时间】:2011-09-05 14:41:08
【问题描述】:

我有一个包含很多对象的工作区,我想删除除一个之外的所有对象。理想情况下,我想避免输入rm(obj.1, obj.2... obj.n)。可以注明remove all objects but these ones吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    这是一个简单的构造,通过使用setdiff

    rm(list=setdiff(ls(), "x"))
    

    还有一个完整的例子。运行此操作需要您自担风险 - 它将删除除 x 之外的所有变量:

    x <- 1
    y <- 2
    z <- 3
    ls()
    [1] "x" "y" "z"
    
    rm(list=setdiff(ls(), "x"))
    
    ls()
    [1] "x"
    

    【讨论】:

    • 这里使用的技术是使用 list= 到 rm,它允许将字符向量而不是名称列表传递给 rm。
    【解决方案2】:

    要保留名称与模式匹配的所有对象,您可以使用grep,如下所示:

    to.remove <- ls()
    to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
    rm(list=to.remove)
    

    【讨论】:

    • 太棒了!你知道有什么方法可以让这个答案变成一行代码而不是三行代码吗?
    【解决方案3】:

    使用gdata 包中的keep 函数非常方便。

    > ls()
    [1] "a" "b" "c"
    
    library(gdata)
    > keep(a) #shows you which variables will be removed
    [1] "b" "c"
    > keep(a, sure = TRUE) # setting sure to TRUE removes variables b and c
    > ls()
    [1] "a"
    

    【讨论】:

    • 我发现使用 gdata 中的“keep”似乎更有意义,并且更容易记住 base R 中命令的所有复杂性。
    【解决方案4】:

    v替换为您要保留的对象的名称

    rm(list=(ls()[ls()!="v"]))
    

    帽子提示:http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

    【讨论】:

      【解决方案5】:

      从一个函数中,rm .GlobalEnv 中除该函数之外的所有对象

      initialize <- function(country.name) {
      
        if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
          rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
        }
      
      }
      

      【讨论】:

        【解决方案6】:

        我花了几个小时寻找一个类似但略有不同的问题的答案 - 我需要能够删除 R 中的所有对象(包括函数),除了少数向量。

        一种方法:

        rm(list=ls()[! ls() %in% c("a","c")])
        

        我要保留的向量被命名为“a”和“c”。

        希望这可以帮助任何寻找相同解决方案的人!

        【讨论】:

        • 这应该也可以,rm(list=setdiff(ls(), c("a", "c"))),对吧?请参阅@Andrie 的回答。
        【解决方案7】:

        我认为另一个选项是在 RStudio 中打开工作区,然后将列表更改为环境右上角的网格(下图)。然后勾选要清除的对象,最后单击清除。

        【讨论】:

        • 同样,点击名称框,选择所有文件,然后取消选择所有要保留的文件。
        【解决方案8】:

        这利用了ls()pattern 选项,如果您不想保留很多具有相同模式的对象:

        > foo1 <- "junk"; foo2 <- "rubbish"; foo3 <- "trash"; x <- "gold"  
        > ls()
        [1] "foo1" "foo2" "foo3" "x"   
        > # Let's check first what we want to remove
        > ls(pattern = "foo")
        [1] "foo1" "foo2" "foo3"
        > rm(list = ls(pattern = "foo"))
        > ls()
        [1] "x"
        

        【讨论】:

        • 哇,这看起来很危险!有没有办法在 shell 中测试匹配 la "echo" 的模式?
        • 我猜rm 函数应该始终小心使用(在shell 中更是如此!)。请参阅我的编辑以获取您的问题的答案。
        【解决方案9】:

        这个怎么样?

        # Removes all objects except the specified & the function itself.
        
        rme <- function(except=NULL){
          except = ifelse(is.character(except), except, deparse(substitute(except)))
          rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"rme")), envir=.GlobalEnv)
        }
        

        【讨论】:

          【解决方案10】:
          require(gdata)
          keep(object_1,...,object_n,sure=TRUE)
          ls()
          

          【讨论】:

          • @Rahul Premraj 的 answer 的副本。
          【解决方案11】:

          假设您想从环境中移除除 df 之外的所有对象:

          rm(list = ls(pattern="[^df]"))
          

          【讨论】:

            【解决方案12】:

            让我们换个思路,如果我们想删除一个组怎么办? 试试这个,

             rm(list=ls()[grep("xxx",ls())]) 
            

            我个人不喜欢屏幕上有太多表格和变量,但我还是无法避免使用它们。所以我把临时的东西命名为“xxx”开头,等不用了以后可以去掉。

            【讨论】:

              【解决方案13】:

              以下内容将从您的控制台中删除所有对象

              rm(list = ls())
              

              【讨论】:

              • 首先,这不是被问到的。其次,在前面的答案中已经涵盖了在 R 中执行此操作的所有可能方式。非常欢迎您帮助有新问题的其他用户。这个问题在 6 年前就已经解决了,而且这个解决方案今天仍然有效。
              【解决方案14】:
              # remove all objects but selected
              rm(list = ls()[which("key_function" != ls())])
              

              【讨论】:

                【解决方案15】:

                要保留对象的列表,可以使用:

                rm(list=setdiff(ls(), c("df1", "df2")))
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2021-10-25
                  • 1970-01-01
                  • 2016-08-03
                  • 1970-01-01
                  • 2015-05-26
                  相关资源
                  最近更新 更多