class - clase en R: S3 vs S4
(2)
¿Qué pasa con las clases de referencia ? no es S3 y algunos lo consideran azúcar sintáctico encima de S4, pero es mucha azúcar.
Para un pequeño ejemplo, verifique estas respuestas a una pregunta que hice aquí hace unos meses.
Todavía tengo que descubrir cómo escribir archivos Rd para tales clases.
Quiero crear una clase en R, ¿debería usar la clase S3 o S4?
Leí muchas cosas diferentes sobre ellos, ¿hay alguno superior al otro?
S3 solo puede despachar en su primer argumento, mientras que S4 puede despachar en múltiples argumentos. Si quieres ser capaz de escribir métodos para la función foo
que deberían hacer cosas diferentes si se les da un objeto de clase "bar"
u objetos dados de clase "bar"
y "foobar"
, u objetos dados de clase "barfoo"
y "foobar"
, entonces S4 proporciona una manera mucho mejor de manejar tales complejidades.
S3 es muy simple y fácil de implementar, pero no es realmente un sistema formal orientado a objetos. Esa simplicidad tiene el costo de hacer que los objetos pertenecientes a una clase tengan los componentes / slots correctos, etc. Con S3 puedo hacer cosas como class(obj) <- "lm"
y el método de envío usará métodos para la clase "lm"
cuando se pasa obj
, pero no hay garantía de que obj
realmente sea un objeto de clase "lm"
.
S3 es fácil de implementar, documentar y requiere menos conocimiento adicional por parte del programador.
Cuál usar solo puede ser algo que pueda decidir. Doug Bates (2003) dijo, por ejemplo, que para nuevos proyectos usaría S4 sobre S3. Todavía no he tenido la necesidad de usar nada más que los métodos S3.
Así que me sentaría y pensaría en el tipo de clases y métodos que desea operar en esas clases. Piensa en la funcionalidad que deseas, y eso probablemente apuntará hacia un sistema u otro.
Douglas Bates. Conversión de paquetes a S4 . R News, 3 (1): 6-8, junio de 2003