Bagaimana saya bisa menghapus semua objek kecuali satu dari ruang kerja di R?

219

Saya memiliki ruang kerja dengan banyak objek dan saya ingin menghapus semua kecuali satu. Idealnya saya ingin menghindari mengetik rm(obj.1, obj.2... obj.n). Apakah mungkin untuk ditunjukkan remove all objects but these ones?

DQdlM
sumber

Jawaban:

373

Berikut ini adalah konstruksi sederhana yang akan melakukannya, dengan menggunakan setdiff:

rm(list=setdiff(ls(), "x"))

Dan contoh lengkap. Jalankan ini dengan risiko Anda sendiri - itu akan menghapus semua variabel kecuali x:

x <- 1
y <- 2
z <- 3
ls()
[1] "x" "y" "z"

rm(list=setdiff(ls(), "x"))

ls()
[1] "x"
Andrie
sumber
8
Teknik yang digunakan di sini adalah menggunakan list = to rm, yang memungkinkan vektor karakter diteruskan ke rm alih-alih daftar nama.
Spacedman
53

Menggunakan keepfungsi dari gdatapaket ini cukup nyaman.

> 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
sumber
Saya menemukan bahwa menggunakan "menjaga" dari gdata tampaknya lebih masuk akal dan lebih mudah untuk mengingat bahwa semua kompleksitas perintah di basis R.
Darius
47

Saya pikir pilihan lain adalah membuka ruang kerja di RStudio dan kemudian mengubah daftar menjadi kisi di kanan atas lingkungan (gambar di bawah). Kemudian centang objek yang ingin Anda hapus dan akhirnya klik hapus.

masukkan deskripsi gambar di sini

Sadegh
sumber
3
Demikian juga, klik kotak Nama, yang memilih semua file, lalu hapus centang semua file yang ingin Anda simpan.
Stephen
26

Saya hanya menghabiskan beberapa jam mencari jawaban untuk pertanyaan yang serupa tetapi sedikit berbeda - saya harus dapat menghapus semua objek dalam R (termasuk fungsi) kecuali beberapa vektor.

Salah satu cara untuk melakukan ini:

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

Di mana vektor yang ingin saya simpan dinamai 'a' dan 'c'.

Semoga ini bisa membantu siapa pun yang mencari solusi yang sama!

Cakar
sumber
11
Ini juga harus bekerja rm(list=setdiff(ls(), c("a", "c"))), kan? Lihat jawaban @ Andrie.
hplieninger
17

Untuk menjaga semua objek yang namanya cocok dengan pola, Anda dapat menggunakan grep, seperti:

to.remove <- ls()
to.remove <- c(to.remove[!grepl("^obj", to.remove)], "to.remove")
rm(list=to.remove)
Aaron meninggalkan Stack Overflow
sumber
6

Ini mengambil keuntungan dari ls()'s patternpilihan, dalam kasus ini Anda memiliki banyak objek dengan pola yang sama bahwa Anda tidak ingin menyimpan:

> 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
sumber
whoah, itu sepertinya berbahaya! Apakah ada cara untuk menguji pola yang cocok dengan la "echo" di shell?
DQdlM
1
Saya kira rmfungsinya harus selalu digunakan dengan hati-hati (lebih-lebih di shell!). Lihat hasil edit saya untuk jawaban atas pertanyaan Anda.
Peter Diakumis
3
require(gdata)
keep(object_1,...,object_n,sure=TRUE)
ls()
Holly
sumber
1
Duplikat jawaban @Rahul Premraj .
hplieninger
3

mari berfikir dengan cara yang berbeda, bagaimana jika kita ingin menghapus grup? coba ini,

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

Saya pribadi tidak suka tabel terlalu banyak, variabel di layar saya, namun saya tidak bisa menghindari menggunakannya. Jadi saya beri nama hal-hal sementara yang dimulai dengan "xxx", jadi saya dapat menghapusnya setelah tidak digunakan lagi.

Grec001
sumber
2

Dari dalam suatu fungsi, rm semua objek di .GlobalEnv kecuali fungsi

initialize <- function(country.name) {

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

}
Griffith Feeney
sumber
2

Untuk menyimpan daftar file, seseorang dapat menggunakan:

rm(list=setdiff(ls(), c("df1", "df2")))
Peter
sumber
1

Bagaimana dengan ini?

# 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)
}
berpikir
sumber
1

dengan asumsi Anda ingin menghapus setiap objek kecuali df dari lingkungan:

rm(list = ls(pattern="[^df]"))
KIA
sumber
1
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])
f0nzie
sumber
-9

Berikut ini akan menghapus semua objek dari konsol Anda

rm(list = ls())
Wisnu Kumar
sumber
4
Pertama-tama, ini bukan yang diminta. Kedua, tentang setiap cara yang mungkin dilakukan dalam R telah dicakup dalam jawaban sebelumnya. Anda dapat membantu pengguna lain yang memiliki pertanyaan baru. Yang ini sudah dipecahkan 6 tahun yang lalu, dan solusi itu masih berlaku sampai sekarang.
Joris Meys