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

时间:2011-11-29 04:13:37

标签: r caching

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

将它们全部删除
rm(list=ls())

或使用

仅删除函数(但不删除变量)
rm(list=lsf.str())

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

5 个答案:

答案 0 :(得分:129)

这是一个删除除函数之外的所有对象的单行:

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

它使用setdiff来查找全局环境中的对象子集(由ls()返回),这些对象不具有模式function(由{{1}返回}})

答案 1 :(得分:7)

发布的setdiff答案很好。我只是觉得我发布了一段时间后我写的相关功能。它的用处取决于读者: - )。

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

答案 2 :(得分:1)

您可以使用以下命令清除所有变量。要小心,因为它无法恢复你的变量。

rm(list=ls(all=TRUE))

答案 3 :(得分:0)

这是一个非常方便的功能,我在某处拾取并调整了一点。可以保留在目录中。

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

答案 4 :(得分:0)

我写这是为了删除当前环境中函数以外的所有对象(使用的编程语言是IDE R-Studio中的R):

    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])返回。因此,从class(get(ls()[i]))返回对象的类