2012-03-05 7 views
2

クラスごとにグローバル環境内のオブジェクトのリストをサブセット化したいと考えています。私は特定のクラスなどに属しているオブジェクトの名前を持つ短いリストを作成できるようにしたいと思いグローバル環境内のオブジェクトリストをサブクラス別に設定する

LS()

を実行することによって作成されたリストから

すなわち、 XTSまたは事前

+0

http://stackoverflow.com/questions/5158830/identify-all-objects-of-given-class-for-further-processing – Chase

答えて

2

でPOSIXlt

おかげであなたはls()を取得し、すべてのクラスをチェックすることができます。それは、ls()の後のフィルタリングのように、特にそうではないかもしれません。 get(var)

# populate global environment with some vars. 
rm(list=ls()) 
a <- 1 
b <- 2 
c <- 'foo' 
d <- 'asdf' 
lst <- ls() 
# return everything 'numeric': 
lst[sapply(lst,function(var) any(class(get(var))=='numeric'))] 
# 'a' 'b' 

varの文字列に対応する変数を取得し、そうvar"a"ある場合、get(var)は(変数aの値である)1を取り出します。

@VincentZoonekyndは以下のように注意します。オブジェクトは複数のクラスを持つことができます。 Soo class(some_xts_object)c("xts","zoo")です。xtsオブジェクトを検索すると上記の方法でsome_xts_objectが返されますが、zooオブジェクトを検索するとでもが検索されます。あなたが望むよう

objs = mget(ls(envir=.GlobalEnv), envir=.GlobalEnv) 
names(Filter(function(i) inherits(i, "lm"), objs)) 

機能(i)は(I、「LM」)を継承して調整することができます。

+0

これは、オブジェクトが1つのクラスにのみ属することを前提としています。これは常にそうであるとは限りません。たとえば、 'xts'オブジェクトもクラス' zoo'です。 –

+0

ああ、私はあなたが複数のクラスを持つことができないことを理解していませんでした。 c( 'xts'、 'zoo');これは頼りになるかもしれませんか?) –

+0

'class(s​​ome_xts_object) some_xts_object) 'は常に少なくとも' xts'と 'zoo'を含んでいますが、もっと多くを含むことができます。私は通常、%class(u) 'で' 'xts"%を使用します。これはあなたの提案に相当します。 –

3

これは、オブジェクトを検査するinheritsを使用してその上にわずかなねじれがあります。

+0

+1は、この例では、メモリ使用量を大幅に増加させません。 –

関連する問題