以编程方式区分R中的S3和S4对象

Ite*_*tor 9 r object s4

如果给一个对象x,是有办法分类它是否是S3S4(或"其他")?我已经看过is.object()isS4(),并可以识别的东西是一个对象(或没有),而且它是一个S4对象(或没有).但是,在我看来,S3对象并不是所有不是S4对象的对象的补充.

因此,如何以编程方式完成这些任务?

这是一个让我烦恼的例子,取自以下的帮助is.object():

a = as.factor(1:3)
is.object(a)  # TRUE
isS4(a) # FALSE
Run Code Online (Sandbox Code Playgroud)

这是否意味着这a是一个S3对象?

Spa*_*man 10

如果它是一个对象而不是S4,则它是一个S3:

is.object(foo) & !isS4(foo)
Run Code Online (Sandbox Code Playgroud)

is.object当事物具有类属性时,检查一些神奇的OBJECT位,因此它本质上是一种快速的方法any(names(attributes(foo))=="class"),它定义了一个S3对象.