rm () все, кроме конкретного объекта


Есть ли у кого-нибудь идея о том, как я могу удалить все в R, кроме одного объекта? Обычно, чтобы удалить все, что я кодирую:

rm(list=ls())

Поэтому я попробовал:

rm(c(list=ls()-my_object))

Но это не сработало.

3 2

3 ответа:

Функция

setdiff() показывает разницу между множествами, поэтому мы можем использовать ее, чтобы получить разницу между всеми объектами (ls()) и объектом, который вы хотите сохранить. Например

## create some objects
df <- data.frame()
v <- as.numeric()

# show everything in environment
objects()
# [1] "df" "v"

## or similarly
ls()
# [1] "df" "v"

## the setdiff() funciton shows the difference between two sets
setdiff(ls(), "df")
# [1] "v"

# so we can use this to remove everything except 'df'
rm(list = setdiff(ls(), "df"))
objects()
# [1] "df"

Несмотря на то, что это было задано давным-давно. Мой ответ может помочь другим в будущем, Предположим, вы хотите удалить из своей среды все, кроме obj1 и obj2

x<- which(ls()=="obj1"|ls()=="obj2")
ls1<- ls()[-x]
rm(list = ls1)

Способ, которым я это делаю, в значительной степени идентичен всем остальным, но я обычно тяготею к логическим индексам...

Для одного объекта, используя логический индекс

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

Или это работает для нескольких объектов, даже если он возвращает сообщение об ошибке

rm(list=ls()[ls()!= c("object_I_want1", "object_I_want2")])

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

ls();
#returns all objects in alphabetical order
# [1] "object_I_dont_want"  "object_I_want"  "object_I_dont_want"
rm(list=ls()[-2])

Технически вам не нужно использовать ls (). Если по какой-либо причине вам нужно вести текущий счет объекты, которые вы хотите сохранить, или у вас уже есть набор объектов, которые вы хотите сохранить или избавиться, или что-то еще, вы можете просто использовать эксклюзивный список вроде этого *хотя технически он также оставит объект, используемый в качестве индекса подмножества.

exsubset = ls()[ls()!= c("object.I.want1", "object_I_want2")];
rm(list=exsubset)