2011-08-05 28 views
9

オブジェクトがxである場合、S3またはS4(または「その他」)であるかどうかを分類する方法はありますか?私はis.object()isS4()を見て、何かがオブジェクト(またはそうでない)であり、それがS4オブジェクト(またはそうでない)であることを識別できます。しかし、S3オブジェクトはS4オブジェクトではないすべてのオブジェクトの補完物であるとは思われません。RでS3とS4のオブジェクトをプログラムで区別する

したがって、どのようにこれらの割り当てをプログラムで行うことができますか?それはaS3オブジェクトであることを

a = as.factor(1:3) 
is.object(a) # TRUE 
isS4(a) # FALSE 

意味しています:ここで

is.object()のヘルプから取られたバグの私を、何かの例ですか?

答えて

10

それはオブジェクトであり、S4はない場合、それはS3です:事はクラス属性を持っているので、その本質的に高速時に設定されますいくつかの魔法OBJECTビット用

is.object(foo) & !isS4(foo) 

is.objectチェックany(names(attributes(foo))=="class")を実行して、S3オブジェクトを定義します。

+0

それはかなりそれに答える。 :) – Iterator

+0

私はあなたが 'any ... 'で示唆している行に沿って' isS3'があるはずだと思います。それは、論理演算 '(A&!B)'の代入に基づいて、 'A'と' B'(例えば、将来の "S5" S3でもS4でもないクラス)。今のところ、これは動作しますが、私はY2Kタイプのバグに向かって歩いているように感じます。 :( – Iterator

関連する問題