2011-08-05 37 views
9

如果給定對象x,是否有方法來分類它是否爲S3S4(或「other」)?我已經看過is.object()isS4(),並且可以識別某物是否是對象,是否是S4對象(或不是)。但是,在我看來,S3對象並不是所有不是S4對象的對象的補充。以編程方式區分R中的S3和S4對象

因此,如何以編程方式完成這些分配?

下面是一些例子是我的錯誤,從幫助採取is.object()

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

這是否意味着aS3對象?

回答

10

如果它是一個對象,是不是S4則是S3:

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

is.object檢查時設置當事物都有一個class屬性一些神奇的OBJECT位,所以它基本上是一個快做的方法any(names(attributes(foo))=="class"),這是什麼定義一個S3對象。

+0

那麼,這相當多的答案。 :) – Iterator

+0

我現在認爲應該有一個'isS3'沿着你用'any ...'建議的內容。事實上,基於邏輯運算'(A&!B)'的賦值不允許與'A'和'B'中的每一個相互排斥的'C'(例如某些將來的「S5」類既不是S3也不是S4)。目前來說,這是有效的,但我覺得我正在走向一個Y2K型的bug。 :( – Iterator