2011-08-05 21 views
9

Si se le da un objeto x, ¿hay alguna manera de clasificar si es o no es S3 o (u "otro")? He mirado is.object() y isS4(), y puedo identificar que algo es un objeto (o no) y que es un objeto S4 (o no). Sin embargo, no me parece que los objetos S3 sean el complemento de todos los objetos que no son objetos S4.Distinguir mediante programación los objetos S3 y S4 en R

Por lo tanto, ¿cómo se pueden realizar estas asignaciones mediante programación?

Aquí es un ejemplo de algo que me molesta, tomados de la ayuda para is.object():

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

¿Quiere decir que a es un objeto S3?

Respuesta

10

Si se trata de un objeto y no es un S4, entonces es un S3:

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

is.object cheques para algunos bits objeto mágico que consiga establecer cuando la cosa tiene un atributo de clase, por lo que su esencialmente una rápida forma de hacer any(names(attributes(foo))=="class"), que es lo que define un objeto S3.

+0

Bueno, eso casi lo responde. :) – Iterator

+0

Ahora creo que debería haber un 'isS3' en la línea de lo que sugieres con' any ...'. Tal como está, basar una asignación en la operación lógica '(A &! B)' no permite una 'C' que es mutuamente excluyente con cada uno de' A' y 'B' (por ejemplo, algún futuro" S5 " clase que no es ni S3 ni S4). Por ahora, esto funciona, pero siento que estoy caminando hacia un error de tipo Y2K. :( – Iterator

Cuestiones relacionadas