2016-03-14 31 views
7

我有R一個很簡單的問題, 沒有任何理由讓我喜歡的任何理由更喜歡is.character比class(object)==「character」?

is.character(object) 

使用比

class(object) == "character" 

在R.

或其他is.class功能。

+5

嘗試該測試上這個:'xx < - 「abc」; class(xx)< - c(「character」,「otherclass」)' – 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」'總是會給出正確的結果,但是這個結果幾乎從來不是程序員的意圖。對於你所說的話,有人可能會認爲''類函數有錯誤和/或給出隨機結果。 – nicola

相關問題