删除除函数以外的所有变量

我在 R 控制台中加载了不同类型的对象。 我可以用

rm(list=ls())

或者只删除函数(但不删除变量)

rm(list=lsf.str())

我的问题是: 有没有办法除去函数之外的所有变量

129756 次浏览

下面是一行程序,它删除所有对象 除了函数:

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

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

公布的 setdiff答案很好。我只是想发布一下我前阵子写的相关函数。它的有用性取决于读者: ——)。

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

这是一个非常方便的函数,我在哪里学到的,稍微调整了一下。最好放在目录里。

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

可以使用以下命令清除所有变量。要小心,因为你不能得到你的变量回来。

rm(list=ls(all=TRUE))

我编写这个代码是为了从当前环境中除去函数之外的所有对象(使用的编程语言是 R 和 IDE R-Studio) :

    remove_list=c()                             # create a vector


for(i in 1:NROW(ls())){                   # repeat over all objects in environment
if(class(get(ls()[i]))!="function"){    # if object is *not* a function
remove_list=c(remove_list,ls()[i])     # ..add to vector remove_list
}
}


rm(list=remove_list)                        # remove all objects named in remove_list

注释 -

Rm (list =)中的参数“ list”必须是一个字符向量。

位于当前环境 i 位置的对象的名称从 ls ()[ i ]返回,对象本身从 get (ls ()[ i ])返回。因此,对象的类从类(get (ls ()[ i ])返回