как сделать функцию в R для удаления всех объектов из глобальной среды, кроме значений по умолчанию и объектов, переданных в качестве аргументов - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в 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 голосов
/ 12 февраля 2019

Я думаю, что эта функция может помочь:

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"
...