style shinythemes app r inheritance r-faq

shinythemes - ¿Cuál es la diferencia entre es y hereda?



tags$style shiny (1)

Version corta:

Usa las inherits , pero ten cuidado con los números y las clases de S4.

Versión más larga:

Desde la sección Vea también de la página de ayuda:

heredar es casi siempre equivalente a is, tanto para objetos S4 como no S4, y es algo más rápido. La no equivalencia se aplica a las clases que tienen superclases condicionales, con una prueba no trivial = en la relación (no es común ni desalentada): para estas, es una prueba para la relación pero hereda, por definición, la herencia condicional para los objetos S4.

De la sección de Clases Formales de la página de ayuda inherits :

El análogo de hereda para las clases formales es es. Las dos funciones se comportan consistentemente con una excepción: las clases S4 pueden tener herencia condicional, con una prueba explícita. En este caso, probará la condición, pero hereda ignora todas las superclases condicionales.

Por lo tanto, en su mayoría devuelven lo mismo, pero la inherits es más rápida, por lo que debería ser la opción predeterminada en la mayoría de los casos. (Como lo mencionó Konrad, también requiere que el paquete de methods esté cargado, lo que puede hacer que no sea adecuado para usos sensibles al rendimiento de Rscript ).

Los valores pueden diferir si está utilizando clases S4 con herencia condicional, pero no se recomienda (consulte la sección "Selección de métodos y envío: Detalles"), lo que significa que es de esperar que sea poco frecuente.

El lugar más obvio donde las dos funciones difieren es cuando se comprueba si los enteros son numéricos.

class(1L) ## [1] "integer" is.numeric(1L) ## [1] TRUE is(1L, "numeric") ## [1] TRUE inherits(1L, "numeric") ## [1] FALSE

Si quiero verificar si una variable hereda de alguna clase, puedo usar is o inherits .

class(letters) ## [1] "character" is(letters, "character") ## [1] TRUE inherits(letters, "character") ## [1] TRUE

¿Hay alguna preferencia por la que debería usar y alguna vez devuelven valores diferentes?