如何在R中制作函数以从全局环境中删除所有对象(默认值和作为参数传递的对象除外)

时间:2019-02-11 19:50:10

标签: r ls rm

我是R的新手(通常是编程人员),所以我一直在进行各种功能来使自己适应它。

我一直在试图弄清楚如何创建一个R函数,该函数将清除我的全局环境中除指定少数几个对象之外的所有对象。我见过其他人使用的代码如下:

rm(list= ls()[!(ls() %in% c('keepThis','andThis'))],envir = )

但是,每当我将其放入函数中(不带参数)时,该函数都不会从全局环境中删除任何内容。我想知道为什么。

我还有更多的运气:

clean <- function(except){
    except = ifelse(is.character(except), except, deparse(substitute(except)))
    rm(list=setdiff(ls(envir=.GlobalEnv), c(except,"clean")), envir=.GlobalEnv)
}

但是我不知道如何修改此对象以允许一次保存两个以上的对象。

理想情况下,我希望有一个函数可以默认保存几个指定的对象以及作为参数传递的任何对象。这有可能吗?

1 个答案:

答案 0 :(得分:0)

我认为此功能可能会有所帮助:

rm.except <- function(except, pattern) {
  except = except
  pattern = pattern
  formula = c(c(except), ls(pattern = pattern, envir = .GlobalEnv))
  rm(list = setdiff(ls(envir = .GlobalEnv), formula), envir = .GlobalEnv)
}  

ls()在我的环境中:

 [1] "a"          "al"         "b"          "c"          "corrmatrix" "counts"    
 [7] "d"          "df1"        "df2"        "e"          "f"     

我希望删除所有对象;对象a,b,c,d和包含 df 的对象除外;

rm.except(except = c("a", "b", "c", "d"), pattern = "df")  

ls()将为:

[1] "a"   "b"   "c"   "d"   "df1" "df2"