Як видалити лише кілька конкретних об'єктів з робочої області?


161

Я хотів би видалити деякі дані з робочої області. Я знаю, що кнопка «Очистити все» видалить усі дані. Однак я хотів би видалити лише певні дані.

Наприклад, я маю ці рамки даних у розділі даних:

data
data_1
data_2
data_3

Я хотів би видалити data_1, data_2і data_3, зберігаючи при цьому data.

Я спробував data_1 <- data_2 <- data_3 <- NULLвидалити дані (я думаю), але все ще зберігає їх у зоні робочої області, тому це не зовсім те, що я хотів би зробити.

Відповіді:


247

Відповідь ви знайдете, ввівши ?rm

rm(data_1, data_2, data_3)

44
Для видалення всіх змінних можна використовувати rm(list=ls()).
larkee

1
але як можна обійтися з графічним інтерфейсом, без командного рядка? як у Revolution R
скан

1
що робити, якщо я хочу видалити всі змінні з іменами, починаючи з літери A, скажімо, "A001", "A002" .... "A999". Я не хочу вводити стільки імен змінних. Дякую!
користувач3768495

2
Використовуйте відповідь @ mbask (трохи нижче): rm(list = ls()[grep("A", ls())])
Поп

74

Корисний спосіб видалити цілий набір об’єктів, названих однаково:

rm(list = ls()[grep("^tmp", ls())])

тим самим видаляючи всі об'єкти, назва яких починається з рядка "tmp".

Редагувати: Після коментаря Gsee, використовуючи patternаргумент:

rm(list = ls(pattern = "^tmp"))

Редагувати: Відповідаючи на коментар Рафаеля, одним із способів збереження лише підмножини об'єктів є називання даних, які ви хочете зберегти за певним шаблоном. Наприклад, якщо ви хочете видалити всі об'єкти, ім'я яких не починається з paperвас, ви видасте таку команду:

rm(list = grep("^paper", ls(), value = TRUE, invert = TRUE))

7
lsприймає patternаргумент, тож ви можете спростити це доrm(list=ls(pattern="^tmp"))
GSee

1
Окремо перевірте, що станеться, коли ви користуєтесь value=TRUEз grep... може зберегти певний текст.
GSee

Привіт, чи є спосіб зберегти деякі дані та видалити інші (більша кількість)? Ура
Рафаель

1
Привіт! І як я міг зберегти у своєму R-середовищі дві різні схеми? Я спробував "rm (list = grep (" ^ paper "|" ObjectExample ", ls (), value = TRUE, invert = TRUE))". Хтось знає?
Dekike

1
Ви повинні включити свій регулярний вираз до patternаргументу grep:rm(list = grep("^paper|ObjectExample", ls(), value = TRUE, invert = TRUE))
mbask

15

Наступна команда зробить

rm(list=ls(all=TRUE))

2
Це видалить всі з робочою області, а не тільки data1, data2і data3(тобто dataбудуть видалені теж). Що добре, якщо це те, що ти хочеш ...
Phil

2
А що робити, якщо хочеться видалити лише дані, а не функції, значення чи інші об'єкти, скажімо, у глобальному середовищі?
Нікос Олександріс


6

Ви можете використовувати aproposфункцію, яка використовується для пошуку об'єктів за допомогою часткової назви.

rm(list = apropos("data_"))

3

Якщо ви просто хочете видалити одну із групи змінних, ви можете створити список і зберегти лише потрібну вам змінну. Функцію rm можна використовувати для видалення всіх змінних, крім "даних". Ось сценарій:

0->data
1->data_1
2->data_2
3->data_3
#check variables in workspace
ls()
rm(list=setdiff(ls(), "data"))
#check remaining variables in workspace after deletion
ls()

#note: if you just use rm(list) then R will attempt to remove the "list" variable. 
list=setdiff(ls(), "data")
rm(list)
ls()

3

Якщо ви використовуєте RStudio, будь ласка, неrm(list = ls()) забудьте ніколи не використовувати підхід! * Натомість вам слід будувати робочий процес навколо часто використовуючи ярлик Ctrl+ Shift+, F10щоб перезапустити сеанс R. Це найшвидший спосіб зняти поточний набір визначених користувачем змінних І очистити завантажені пакети, пристрої тощо. Відтворюваність вашої роботи помітно зросте, прийнявши цю звичку.

Дивіться цю чудову тему спільноти Rstudio для (h / t @kierisi) для більш ретельного обговорення (головна суть захоплена тим, про що я вже говорив).

Я мушу визнати свій власний перші роки написання R кодованого сценарію після сценарію, починаючи з rm"трюку" - я пишу цю відповідь як пораду для всіх інших, хто, можливо, починає свою R-кар'єру.

* звичайно, для цього є законне використання - на кшталт attach- але початківцям користувачам буде набагато краще обслуговуватись (IMO), перетинаючи цей міст пізніше.


3
  1. У RStudio переконайтесь, що Environmentвкладка перебуває в Grid(не List) режимі.

  2. Поставте галочку на об'єкті, який ви хочете вилучити з оточення.

  3. Клацніть піктограму віника.


2
paste0("data_",seq(1,3,1)) 
# makes multiple data.frame names with sequential number
rm(list=paste0("data_",seq(1,3,1))
# above code removes data_1~data_3

1

Щоб очистити всі дані:

натисніть на Misc>Remove all objects.

Ваше добре піти.

Щоб очистити консоль:

натисніть на edit>Clear console.

Не потрібно ніякого коду.


1
Хоча мені довелося це робити Session> Clear Workspace....
Петро К.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.