删除除函数外的所有variables

我在R控制台中加载了不同types的对象。 我可以使用全部删除它们

rm(list=ls()) 

或者只使用删除函数(而不是variables)

 rm(list=lsf.str()) 

我的问题是:有没有办法删除除了函数的所有variables

这是一个除了函数之外的所有对象的移除:

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

它使用setdiff来查找全局环境中没有模式function (由lsf.str()返回)的对象的子集(由ls()返回)

发布的setdiff答案很好。 我只是想我会发布这个相关的function,我写了一会儿回来。 它的用处取决于读者:-)。

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

这里有一个非常方便的function,我拿起来,稍微调整一下。 可能很高兴留在目录中。

 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 

您可以使用以下命令清除所有variables。 要小心,因为它不能让你的variables回来。

 rm(list=ls(all=TRUE))