web-dev-qa-db-fra.com

supprimer toutes les variables sauf les fonctions

J'ai chargé dans une console R différents types d'objets . Je peux tous les supprimer en utilisant

rm(list=ls())

ou supprimer uniquement les fonctions (mais pas les variables) en utilisant

rm(list=lsf.str())

Ma question est la suivante: Y at-il un moyen de supprimer toutes les variables, sauf les fonctions

106
RockScience

Voici une ligne qui supprime tous les objets à l'exception de functions:

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

Il utilise setdiff pour rechercher le sous-ensemble d'objets de l'environnement global (renvoyé par ls()) n'ayant pas le mode function (renvoyé par lsf.str())

126
Josh O'Brien

La réponse setdiff affichée est Nice. Je pensais juste que je posterais cette fonction que j'ai écrite il y a quelque temps Son utilité appartient au lecteur :-).

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

Vous pouvez utiliser la commande suivante pour effacer TOUTES les variables. Faites attention car vous ne pouvez pas récupérer vos variables.

rm(list=ls(all=TRUE))
1
lwileczek

Voici une fonction très pratique que j'ai choisie quelque part et ajustée un peu. Peut-être agréable à garder dans le répertoire.

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
Rich Scriven