hapus semua variabel kecuali fungsi


113

Saya telah dimuat di konsol R berbagai jenis objek. Saya dapat menghapus semuanya menggunakan

rm(list=ls())

atau hanya menghapus fungsi (tetapi bukan variabel) menggunakan

rm(list=lsf.str())

Pertanyaan saya adalah: apakah ada cara untuk menghapus semua variabel kecuali fungsi

Jawaban:


137

Berikut satu baris yang menghapus semua objek kecuali fungsi:

rm(list = setdiff(ls(), lsf.str()))

Ini digunakan setdiffuntuk menemukan subset objek di lingkungan global (seperti yang dikembalikan oleh ls()) yang tidak memiliki mode function(seperti yang dikembalikan oleh lsf.str())


5
Jika Anda juga ingin menghapus objek yang namanya dimulai dengan titik, gunakan ini sebagai gantinya: rm(list=setdiff(ls(all.names=TRUE), lsf.str(all.names=TRUE)))
Josh O'Brien

1
Terima kasih banyak atas jawaban ini. Bolehkah saya tahu apa itu periode?
RockScience

1
Tentu. Titik (dalam bahasa Inggris Amerika) adalah nama lain untuk titik, seperti ini: .Untuk melihat apa yang saya bicarakan, coba.j <- 5; ls(); ls(all.names=TRUE)
Josh O'Brien

Terima kasih banyak. Saya sudah memperhatikan bahwa .j tidak terpengaruh oleh ls () tetapi dapat menjelaskannya.
RockScience

7

setdiffJawaban yang diposting bagus. Saya hanya berpikir saya akan memposting fungsi terkait yang saya tulis beberapa waktu lalu. Kegunaannya terserah pembaca :-).

lstype<-function(type='closure'){ 
    inlist<-ls(.GlobalEnv)
    if (type=='function') type <-'closure'
    typelist<-sapply(sapply(inlist,get),typeof)
    return(names(typelist[typelist==type]))
}

1
Terima kasih telah memposting itu. Itu membuat perbandingan yang menarik dengan kode ls.str()yang, bagaimanapun, menguji modedaripada typeofobjek. (Di samping catatan, saya akan terkutuk jika saya dapat mengetahui perbedaan antara keduanya dari dokumentasi mereka).
Josh O'Brien

Saya selalu menggunakan class daripada typeof
RockScience

1

Anda dapat menggunakan perintah berikut untuk menghapus SEMUA variabel. Berhati-hatilah karena Anda tidak bisa mendapatkan variabel Anda kembali.

rm(list=ls(all=TRUE))

1
Senang mengetahui tetapi bukan itu pertanyaannya
RockScience

Saya kira saya harus meninggalkan itu sebagai komentar karena itu lebih merupakan FYI. Maaf.
lwileczek

0

Inilah fungsi yang cukup nyaman yang saya ambil di suatu tempat dan sedikit disesuaikan. Sebaiknya simpan di direktori.

list.objects <- function(env = .GlobalEnv) 
{
    if(!is.environment(env)){
        env <- deparse(substitute(env))
        stop(sprintf('"%s" must be an environment', env))
    }
    obj.type <- function(x) class(get(x, envir = env))
    foo <- sapply(ls(envir = env), obj.type)
    object.name <- names(foo)
    names(foo) <- seq(length(foo))
    dd <- data.frame(CLASS = foo, OBJECT = object.name, 
                     stringsAsFactors = FALSE)
    dd[order(dd$CLASS),]
}

> x <- 1:5
> d <- data.frame(x)
> list.objects()
#        CLASS       OBJECT
# 1 data.frame            d
# 2   function list.objects
# 3    integer            x 
> list.objects(env = x)
# Error in list.objects(env = x) : "x" must be an environment

0

Saya menulis ini untuk menghapus semua objek selain fungsi dari lingkungan saat ini (Bahasa pemrograman yang digunakan adalah R dengan IDE R-Studio):

    remove_list=c()                             # create a vector

      for(i in 1:NROW(ls())){                   # repeat over all objects in environment
        if(class(get(ls()[i]))!="function"){    # if object is *not* a function
         remove_list=c(remove_list,ls()[i])     # ..add to vector remove_list
         }    
      }

    rm(list=remove_list)                        # remove all objects named in remove_list

Catatan-

Argumen "list" di rm (list =) harus berupa vektor karakter.

Nama objek di posisi i dari lingkungan saat ini dikembalikan dari ls () [i] dan objek itu sendiri dari get (ls () [i]). Oleh karena itu kelas suatu objek dikembalikan dari kelas (get (ls () [i]))


Harap tambahkan lebih banyak informasi tentang "lingkungan saat ini", misalnya apakah ini shell atau bahasa pemrograman tertentu
DiveIntoML
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.