132 votes

supprimer toutes les variables, sauf les fonctions

J'ai chargé dans une R de la console de différents types d'objets. Je peux l'enlever à l'aide d'

rm(list=ls())

ou supprimer uniquement les fonctions (mais pas les variables) à l'aide de

rm(list=lsf.str())

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

158voto

Josh O'Brien Points 68397

Voici un one-liner qui supprime tous les objets , sauf pour les fonctions:

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

Il utilise setdiff pour trouver le sous-ensemble d'objets dans l'environnement mondial (retourné par ls()) qui n'ont pas de mode d' function (retourné par lsf.str())

7voto

Carl Witthoft Points 9799

Posté setdiff de réponses est agréable. J'ai juste pensé que je poste cette fonction, j'ai écrit un bout de temps. Son utilité est 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]))
}

0voto

Richard Scriven Points 15577

Voici une jolie commode fonction que j'ai ramassé quelque part et ajusté un peu. Peut-être bien de 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X