¿Cuál es la diferencia entre el tipo (devuelto por typeof) y la clase (devuelto por class) de una variable? ¿Es la diferencia similar a la de, digamos, lenguaje C ++?
¿Cuáles son los posibles tipos y clases de variables?
En R, todo "objeto" tiene una modey una class. El primero representa cómo se almacena un objeto en la memoria (numérico, carácter, lista y función) mientras que el último representa su tipo abstracto. Por ejemplo:
d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list
Como puede ver, los marcos de datos se almacenan en la memoria listpero están envueltos en data.frameobjetos. Este último permite el uso de funciones miembro, así como funciones de sobrecarga, como printcon un comportamiento personalizado.
typeof( storage.mode) normalmente dará la misma información que modepero no siempre. Caso en punto:
El razonamiento detrás de esto se puede encontrar aquí :
La función específica de R typeof devuelve el tipo de un objeto R
El modo de función proporciona información sobre el modo de un objeto en el sentido de Becker, Chambers & Wilks (1988), y es más compatible con otras implementaciones del lenguaje S
El enlace que he publicado anteriormente también contiene una lista de todos los R nativo basic types(vectores, listas etc.) y todos los compound objects(factores y data.frames), así como algunos ejemplos de cómo mode, typeofy classestán relacionadas para cada tipo.
"En R cada" objeto "tiene un modo y una clase" siempre que se vean desde la perspectiva de la estructura de clases de S4 OOP. En S3, los objetos pueden no tener nombres de clase asignados:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER
6
typerealmente se refiere a las diferentes estructuras de datos disponibles en R. Esta discusión en el manual de Definición del lenguaje R puede ayudarlo a comenzar con objetos y tipos.
Por otro lado, classsignifica algo más en R de lo que puede esperar. Del manual de definición de lenguaje R (que viene con su versión de R):
2.2.4 Clases
R tiene un elaborado sistema de clases 1 , controlado principalmente mediante el atributo de clase. Este atributo es un vector de caracteres que contiene la lista de clases de las que hereda un objeto. Esto forma la base de la funcionalidad de "métodos genéricos" en R.
Los usuarios pueden acceder y manipular este atributo virtualmente sin restricción. No se comprueba que un objeto contiene realmente los componentes que esperan los métodos de clase. Por lo tanto, la alteración del atributo de clase debe hacerse con precaución y, cuando estén disponibles, se deben preferir funciones específicas de creación y coerción.
Respuestas:
En R, todo "objeto" tiene una
mode
y unaclass
. El primero representa cómo se almacena un objeto en la memoria (numérico, carácter, lista y función) mientras que el último representa su tipo abstracto. Por ejemplo:d <- data.frame(V1=c(1,2)) class(d) # [1] "data.frame" mode(d) # [1] "list" typeof(d) # list
Como puede ver, los marcos de datos se almacenan en la memoria
list
pero están envueltos endata.frame
objetos. Este último permite el uso de funciones miembro, así como funciones de sobrecarga, comoprint
con un comportamiento personalizado.typeof
(storage.mode
) normalmente dará la misma información quemode
pero no siempre. Caso en punto:typeof(c(1,2)) # [1] "double" mode(c(1,2)) # [1] "numeric"
El razonamiento detrás de esto se puede encontrar aquí :
El enlace que he publicado anteriormente también contiene una lista de todos los R nativo
basic types
(vectores, listas etc.) y todos loscompound objects
(factores y data.frames), así como algunos ejemplos de cómomode
,typeof
yclass
están relacionadas para cada tipo.fuente
oldClass(matrix(1:10, 2,5)) # NULL
type
realmente se refiere a las diferentes estructuras de datos disponibles en R. Esta discusión en el manual de Definición del lenguaje R puede ayudarlo a comenzar con objetos y tipos.Por otro lado,
class
significa algo más en R de lo que puede esperar. Del manual de definición de lenguaje R (que viene con su versión de R):fuente