【问题标题】:rm( ) everything except specific objectrm() 除特定对象外的所有内容
【发布时间】:2017-03-30 02:38:44
【问题描述】:

有人知道如何删除 R 中除一个对象之外的所有内容吗?通常,删除我编码的所有内容:

rm(list=ls())

所以我尝试了:

rm(c(list=ls()-my_object))

但是没有用。

【问题讨论】:

  • rm(list = setdiff(ls(), "my_object") )
  • @SymbolixAU:将其发布为答案
  • 你也可以rm(list=ls()[!ls() %in% 'myobject'])

标签: r set-difference


【解决方案1】:

我的做法与其他人几乎相同,但我通常倾向于使用逻辑索引...

对于单个对象,使用逻辑索引

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

或者这适用于多个对象,即使它返回错误消息

rm(list=ls()[ls()!= c("object_I_want1", "object_I_want2")])

如果您在工作区中只有几个对象,您可以计算并使用它们的数字索引

ls();
#returns all objects in alphabetical order
# [1] "object_I_dont_want"  "object_I_want"  "object_I_dont_want"
rm(list=ls()[-2])

从技术上讲,您不需要使用 ls()。如果出于任何原因您需要对要保留的对象进行统计,或者您已经有一组要保留或删除的对象,或者其他任何原因,您可以使用类似这样的排他列表 *虽然从技术上讲,它也会将对象用作子集索引。

exsubset = ls()[ls()!= c("object.I.want1", "object_I_want2")];
rm(list=exsubset)

【讨论】:

    【解决方案2】:

    尽管很久以前就有人问过了。我的回答可能会在将来对其他人有所帮助, 假设您想从您的环境中删除除 obj1obj2 之外的所有内容

    x<- which(ls()=="obj1"|ls()=="obj2")
    ls1<- ls()[-x]
    rm(list = ls1)
    

    【讨论】:

      【解决方案3】:

      setdiff() 函数显示集合之间的差异,因此我们可以使用它来给出所有对象 (ls()) 和您要保留的对象之间的差异。例如

      ## create some objects
      df <- data.frame()
      v <- as.numeric()
      
      # show everything in environment
      objects()
      # [1] "df" "v"
      
      ## or similarly
      ls()
      # [1] "df" "v"
      
      ## the setdiff() funciton shows the difference between two sets
      setdiff(ls(), "df")
      # [1] "v"
      
      # so we can use this to remove everything except 'df'
      rm(list = setdiff(ls(), "df"))
      objects()
      # [1] "df"
      

      【讨论】:

      • 我最近似乎吸引了很多反对票,看来我有一个粉丝
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2014-12-11
      • 2021-03-22
      相关资源
      最近更新 更多