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?

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"

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"

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


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!


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)


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"

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

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.


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)
  }

}

2

Untuk menyimpan daftar file, seseorang dapat menggunakan:

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

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)
}

1

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

rm(list = ls(pattern="[^df]"))

1
# remove all objects but selected
rm(list = ls()[which("key_function" != ls())])

-9

Berikut ini akan menghapus semua objek dari konsol Anda

rm(list = ls())

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.