1

私は R 関数を扱うのが大好きなので、私のワークスペースには多くの関数が蓄積されています。

ただし、「objects()」コマンドは、オブジェクト自体ではなく、オブジェクトに名前を付ける文字列を返すようです。したがって、「barchart00」という名前の関数がある場合、objects() コマンドで表示され、その型をテストすると、次のコードが示すように関数として検出できます。

is.function(barchart00) [1] TRUE

> objects()
[1] "barchart00"  

> OL<-objects()
> OL
[1] "barchart00"  

> is.function(OL[1])
[1] FALSE

機能が 1 つまたは 2 つまたは 3 つしかない場合、これは問題にはなりません。しかし、実際には、私は何十もの関数と、関数ではないオブジェクトを何十も持っており、objects() によって返されるオブジェクトのリストと同じくらい便利な関数のリストを取得したいと考えています。

私が最初に考えたのは、objects() が実際のオブジェクトのリストを返した場合、そのリストを調べて関数のステータスをテストできるということでした。しかし実際には、objects() は、オブジェクト自体ではなく、オブジェクトの名前である文字列のリストを返すようです。

建設的なアドバイスをいただければ幸いです。ありがとう。

...Hong Ooi が質問に回答しましたが、さらに 8 時間回答済みとしてマークすることはできません。

lsf.str() は私が探していた構文です。

すべての功績は Hong Ooi に帰属します。

https://stackoverflow.com/users/474349/hong-ooi

ありがとう、ホンオイ。

4

1 に答える 1

1

lsf.str良い答えのように見えます。より一般的なツールが必要な場合は、これが私の (horn-tooting here)cgwtoolsパッケージの 1 つです。環境内の特定のタイプのオブジェクトのリストを取得できます (クロージャーだけではありません)。

lstype <-  function(type='closure'){
#simple command to get only one type of object in current environment
# Note: if you foolishly create variables named 'c' ,'q' ,'t' or the like,
# this will fail because typeof finds the builtin function first
        inlist<-ls(.GlobalEnv)
        if (type=='function') type <-'closure'
        typelist<-sapply(sapply(inlist,get),typeof)
        return(names(typelist[typelist==type]))
}
于 2013-11-06T13:15:43.163 に答える