rm () все, кроме конкретного объекта
Есть ли у кого-нибудь идея о том, как я могу удалить все в R, кроме одного объекта? Обычно, чтобы удалить все, что я кодирую:
rm(list=ls())
Поэтому я попробовал:
rm(c(list=ls()-my_object))
Но это не сработало.
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)