2016-03-14 9 views
7

私は、Rと非常に簡単な質問を持っている は私がR.class(object)== "character"よりもchar.characterの方が好きですか?

または他のis.class機能に

class(object) == "character" 

より

is.character(object) 

の使用を好むために何らかの理由があります。

+5

は上のテストを試してみてくださいこれは 'xx < - " abc "; – nrussell

+1

関連:[Rでオブジェクトのクラスをチェックするのに好ましい方法](http://stackoverflow.com/questions/17733500/preferred-method-of-checking -objects-class-in-r) – Henrik

答えて

7

明白な可読性とパフォーマンスの引数に加えて、は決してである必要があります。class(foo) == "class"でオブジェクトのクラスをテストしてください。正しい結果を得ることはできません。

nrussellがコメントしたように、S3クラスシステムは、複数のクラス名を持つタグオブジェクトを介して "継承"をサポートしています。単一のクラス名以上が存在するとすぐに、この等価性チェックはナンセンスになります。

代わりに、いずれかを使用:

if (inherits(obj, 'class')) 
    … action … 

それとも、あなたが明示的に厳密なテスト、ではない(極めてまれであるべき)相続テストを実行する場合:

if (identical(class(obj), 'class')) 
    … action … 
+3

@RichardScriven「すべての時間」は無益な双曲線です。 ;-)私はそれをいつものように使う。 –

+2

私は 'class(foo)==" class "'は常に正しい結果を返すと言いたいですが、その結果はほとんどプログラマが意図したものではありません。あなたが言ったことで、誰かが 'class'関数がバグを持っていると思うかもしれませんし、ランダムな結果を与えるかもしれません。 – nicola

関連する問題