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