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

时间:2011-08-05 16:54:37

标签: r object s4

如果给定了对象x,是否有办法对其是S3还是S4(或“其他”)进行分类?我查看了is.object()isS4(),并且可以识别出某个对象(或不是对象)并且它是一个S4对象(或不是)。但是,在我看来,S3对象并不是所有不是S4对象的对象的补充。

因此,如何以编程方式完成这些作业?

这是一个让我感到困惑的例子,取自is.object()的帮助:

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

这是否意味着aS3个对象?

1 个答案:

答案 0 :(得分:10)

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

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

is.object检查在事物具有类属性时设置的一些魔术OBJECT位,因此它本质上是一种快速的方法any(names(attributes(foo))=="class"),这是定义S3对象的。