簡體   English   中英

刪除除函數之外的所有變量

[英]remove all variables except functions

我在 R 控制台中加載了不同類型的對象。 我可以使用它們全部刪除

rm(list=ls())

或僅刪除函數(而不是變量)使用

rm(list=lsf.str())

我的問題是:有沒有辦法刪除除函數之外的所有變量

這是一個刪除函數以外的所有對象的單行代碼:

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

它使用setdiff來查找全局環境中沒有模式function的對象子集(由ls()返回ls() (由lsf.str()返回)

發布的setdiff答案很好。 我只是想我會發布我不久前寫的這個相關函數。 它的用處取決於讀者:-)。

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

您可以使用以下命令清除所有變量。 小心,因為你無法恢復你的變量。

rm(list=ls(all=TRUE))

這是一個非常方便的功能,我在某處找到並稍微調整了一下。 保存在目錄中可能會很好。

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

我寫這個是為了從當前環境中刪除除函數之外的所有對象(使用的編程語言是帶有 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])) 返回的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM