関数以外のすべての変数を削除する


113

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

rm(list=ls())

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

rm(list=lsf.str())

私の質問は:関数以外のすべての変数を削除する方法はありますか

回答:


137

次に関数を除くすべてのオブジェクト削除するワンライナーを示します。

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

それは使用していますsetdiff(によって返される、地球環境におけるオブジェクトのサブセットを見つけるためにls()モードを持っていない)function(によって返されますlsf.str()


5
あなたも、名前がピリオドで始まるオブジェクトを削除したい場合は、代わりにこれを使用する: rm(list=setdiff(ls(all.names=TRUE), lsf.str(all.names=TRUE)))
ジョシュ・オブライエン

1
この回答をどうもありがとう。ピリオドとは何ですか?
RockScience 2011年

1
承知しました。ピリオド(アメリカ英語)は、次のようにドットの別名.です。私が話していることを確認するには、試してください.j <- 5; ls(); ls(all.names=TRUE)
Josh O'Brien

よかった。ありがとう。.jはls()の影響を受けないことにすでに気づきましたが、それは説明できました。
RockScience 2011年

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]))
}

1
投稿いただきありがとうございます。これは、オブジェクトでls.str()modeなくコードをテストするコードとの興味深い比較になりtypeofます。(余談ですが、これらの2つのドキュメントの違いをドキュメントから理解できれば、私は非難されます)。
Josh O'Brien

私は常にtypeofの代わりにクラスを使用します
RockScience

1

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

rm(list=ls(all=TRUE))

1
知っておくとよいが、それが問題ではない
RockScience

あくまで参考にしたいので、コメントとして残しておくべきだったと思います。ごめんなさい。
lwileczek

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

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]))から返されます


「現在の環境」に関する詳細情報を追加してください(例:これがシェルか特定のプログラミング言語か)
DiveIntoML
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.