Відповіді:
Ось проста конструкція, яка зробить це, використовуючи 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"
Використовувати 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"
Я думаю, що ще один варіант - відкрити робочу область в RStudio, а потім змінити список на сітку вгорі праворуч (зображення внизу). Потім позначте об'єкти, які потрібно очистити, і, нарешті, натисніть на очистити.
Я просто витратив кілька годин на полювання на відповідь на подібне, але трохи інше запитання - мені потрібно було вміти видаляти всі об'єкти в R (включаючи функції), за винятком кількох векторів.
Один із способів зробити це:
rm(list=ls()[! ls() %in% c("a","c")])
Де вектори, які я хочу зберегти, називаються "a" і "c".
Сподіваюсь, це допоможе кожному, хто шукає те саме рішення!
rm(list=setdiff(ls(), c("a", "c")))
, правда? Дивіться відповідь @ Андрі.
Щоб зберегти всі об'єкти, імена яких відповідають шаблону, ви можете використовувати grep
так:
to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
Замініть v
назви об'єкта, який ви хочете зберегти
rm(list=(ls()[ls()!="v"]))
шапка-наконечник: http://r.789695.n4.nabble.com/Removing-objects-and-clearing-memory-tp3445763p3445865.html
Це скористається опцією 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"
rm
функцію слід завжди використовувати обережно (тим більше в оболонці!). Дивіться мою редакцію для відповіді на ваше запитання.
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
давайте подумаємо по-іншому, що робити, якщо ми хочемо видалити групу? спробуйте це,
rm(list=ls()[grep("xxx",ls())])
Мені особисто не подобається занадто багато таблиць, змінних на моєму екрані, але я не можу уникнути їх використання. Тому я називаю тимчасові речі, що починаються з "xxx", тому я можу їх видалити після того, як вони більше не використовуються.
Зсередини функції rm всі об'єкти в .GlobalEnv, крім функції
initialize <- function(country.name) {
if (length(setdiff(ls(pos = .GlobalEnv), "initialize")) > 0) {
rm(list=setdiff(ls(pos = .GlobalEnv), "initialize"), pos = .GlobalEnv)
}
}
Далі буде видалено всі об’єкти з вашої консолі
rm(list = ls())