Как я могу удалить все объекты, кроме одного, из рабочей области в R?


220

У меня есть рабочее пространство с большим количеством объектов, и я хотел бы удалить все, кроме одного. В идеале я хотел бы избежать необходимости печатать rm(obj.1, obj.2... obj.n). Можно ли указать remove all objects but these ones?

Ответы:


375

Вот простая конструкция, которая сделает это, используя 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"

8
Используемая здесь техника заключается в использовании list = to rm, который позволяет символьному вектору передаваться в rm вместо списка имен.
Spacedman

54

Использование keepфункции из gdataпакета довольно удобно.

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

Я считаю, что использование «keep» из gdata, кажется, имеет больше смысла, и легче запомнить, что вся сложность команды в базе R.
Дариус

47

Я думаю, что другой вариант - открыть рабочее пространство в RStudio, а затем изменить список на сетку в правом верхнем углу среды (изображение ниже). Затем отметьте объекты, которые вы хотите очистить, и, наконец, нажмите «Очистить».

введите описание изображения здесь


3
Аналогичным образом щелкните поле «Имя», в котором будут выбраны все файлы, а затем отмените выбор всех файлов, которые вы хотите сохранить.
Стивен

27

Я просто потратил несколько часов на поиски ответа на похожий, но немного другой вопрос - мне нужно было иметь возможность удалить все объекты в R (включая функции), за исключением нескольких векторов.

Один из способов сделать это:

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

Где векторы, которые я хочу сохранить, называются «а» и «с».

Надеюсь, это поможет любому, кто ищет такое же решение!


11
Это тоже должно работать rm(list=setdiff(ls(), c("a", "c"))), верно? Смотри ответ Андри.
hplieninger



6

Это использует параметр ls()'s' 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"

Ого, это кажется опасным! Есть ли способ проверить шаблон, соответствующий "эхо" в оболочке?
DQdlM

1
Я думаю, что rmфункцию всегда следует использовать с осторожностью (особенно в оболочке!). Смотрите мои правки для ответа на ваш вопрос.
Питер Диакумис


3

давайте подумаем иначе, что если мы хотим удалить группу? попробуй это,

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

Мне лично не нравится слишком много таблиц, переменных на моем экране, но я не могу избежать их использования. Поэтому я называю временные элементы, начинающиеся с «xxx», чтобы я мог удалить их после того, как они больше не используются.


2

Внутри функции, rm все объекты в .GlobalEnv, кроме функции

initialize <- function(country.name) {

  if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
    rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
  }

}

2

Чтобы сохранить список файлов, можно использовать:

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

1

Как насчет этого?

# 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)
}

1

при условии, что вы хотите удалить все объекты кроме df из окружения:

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


-9

Следующее удалит все объекты из вашей консоли

rm(list = ls())

4
Прежде всего, это не то, что спросили. Во-вторых, о всех возможных способах сделать это в R было рассмотрено в предыдущих ответах. Мы всегда рады помочь другим пользователям, у которых есть новые вопросы. Это было решено уже 6 лет назад, и это решение остается в силе и сегодня.
Йорис
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.