2011-11-29 21 views
90

He cargado en una consola R diferentes tipos de objetos. puedo quitarlos todos usandoeliminar todas las variables, excepto las funciones

rm(list=ls()) 

o eliminar sólo las funciones (pero no las variables) utilizando

rm(list=lsf.str()) 

Mi pregunta es: hay una manera de eliminar todas las variables, excepto las funciones

Respuesta

102

Aquí hay una sola línea que elimina todos los objetos excepción de funciones:

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

Utiliza setdiff para encontrar el subconjunto de los objetos en el medio ambiente mundial (tal como lo devuelve ls()) que no tienen modo de function (tal como lo devuelve lsf.str())

+5

Si también desea eliminar objetos cuyos nombres comienzan con un punto, utilizar esto en su lugar: 'rm = (lista setdiff (ls (all.names = TRUE), lsf.str (all.names = VERDADERO))) ' –

+1

Muchas gracias por esta respuesta. ¿Puedo saber qué es un período? – RockScience

+1

Claro. Un período (en inglés americano) es otro nombre para un punto, como este: '.' Para ver de qué estoy hablando, intente con' .j <- 5; ls(); ls (all.names = TRUE) ' –

7

El setdiff publicado respuesta es agradable. Solo pensé en publicar esta función relacionada que escribí hace un tiempo. Su utilidad depende del lector :-).

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

Gracias por publicar eso. Hace una comparación interesante con el código para 'ls.str()' que, sin embargo, prueba el 'modo' más que el' typeof' de objetos. (En una nota lateral, voy a ser zurcido si puedo calcular la diferencia entre los dos de su documentación). –

+0

Siempre uso class en lugar de typeof – RockScience

0

Esta es una función bastante conveniente que recogí en algún lugar y ajusté un poco. Sería bueno mantenerlo en el directorio.

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

@MatthewLundberg, buena idea. Yo actualice. –

0

Puede usar el siguiente comando para borrar TODAS las variables. Tenga cuidado porque no puede recuperar sus variables.

rm(list=ls(all=TRUE)) 
+0

Es bueno saberlo, pero esa no es la pregunta no – RockScience

+0

Supongo que debería haber dejado eso como un comentario ya que era más un FYI. Lo siento. – lwileczek

Cuestiones relacionadas