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

r

92549 просмотра

14 ответа

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

Автор: KennyPeanuts Источник Размещён: 17.05.2019 03:09

Ответы (14)


299 плюса

Решение

Вот простая конструкция, которая сделает это, используя 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"
Автор: Andrie Размещён: 31.05.2011 04:01

44 плюса

Использование 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"
Автор: Rahul Premraj Размещён: 26.08.2011 01:04

39 плюса

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

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

Автор: Sadegh Размещён: 14.06.2014 10:18

16 плюса

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

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
Автор: Aaron Размещён: 31.05.2011 04:03

14 плюса

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

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

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

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

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

Автор: Talon Размещён: 15.04.2014 09:55

13 плюса

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

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

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

Автор: Ben Размещён: 05.04.2013 12:15

4 плюса

Это использует параметр 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"
Автор: Peter Diakumis Размещён: 11.12.2014 04:01

2 плюса

require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
Автор: Holly Размещён: 26.10.2015 10:32

1 плюс

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

initialize <- function(country.name) {

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

}
Автор: Griffith Feeney Размещён: 05.02.2014 07:17

0 плюса

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

# 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)
}
Автор: think Размещён: 23.06.2015 09:30

0 плюса

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

rm(list = ls(pattern="[^df]"))
Автор: MCH Размещён: 08.03.2016 01:20

0 плюса

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

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

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

Автор: Grec001 Размещён: 15.02.2017 07:04

0 плюса

# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])
Автор: f0nzie Размещён: 08.02.2019 01:56

-7 плюса

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

rm(list = ls())
Автор: Vishnu Kumar Размещён: 04.04.2017 06:43
Вопросы из категории :
32x32