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

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

Ответы [ 14 ]

325 голосов
/ 31 мая 2011

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

Использование функции 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"
43 голосов
/ 14 июня 2014

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

enter image description here

18 голосов
/ 16 апреля 2014

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

Один способсделайте это:

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

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

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

16 голосов
/ 31 мая 2011

Чтобы сохранить все объекты, имена которых соответствуют шаблону, вы можете использовать grep, например:

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
13 голосов
/ 05 апреля 2013

Замените v на имя объекта, который вы хотите сохранить

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

шапка: http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html

4 голосов
/ 11 декабря 2014

Используется опция 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"
2 голосов
/ 15 февраля 2017

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

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

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

2 голосов
/ 27 октября 2015
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
1 голос
/ 05 февраля 2014

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

initialize <- function(country.name) {

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...