web-dev-qa-db-ja.com

関数を除くすべての変数を削除します

Rコンソールにさまざまなタイプのオブジェクトをロードしました。私はそれらをすべて削除することができます

rm(list=ls())

または、関数のみを削除します(変数は削除しません)。

rm(list=lsf.str())

私の質問は次のとおりです。関数を除くすべての変数を削除する方法はありますか

107
RockScience

すべてのオブジェクトを削除するワンライナー除く関数:

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

setdiffを使用して、モードfunctionls()によって返される)を持たないグローバル環境(lsf.str()によって返される)のオブジェクトのサブセットを検索します。

129
Josh O'Brien

投稿されたsetdiffの回答は素晴らしいです。しばらく前に書いたこの関連関数を投稿すると思った。その有用性は読者次第です:-)。

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

次のコマンドを使用して、すべての変数をクリアできます。変数を取り戻すことができないので注意してください。

rm(list=ls(all=TRUE))
1
lwileczek

ここに、どこかで取り上げて少し調整した非常に便利な機能を示します。ディレクトリに保管しておくといいかもしれません。

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
0
Rich Scriven