Buscar..


Introducción

La clase de un objeto de datos determina qué funciones procesarán sus contenidos. El atributo class es un vector de caracteres, y los objetos pueden tener cero, una o más clases. Si no hay un atributo de clase, todavía habrá una clase implícita determinada por el mode un objeto. La clase se puede inspeccionar con la class función y se puede configurar o modificar mediante la class<- función. El sistema de clases S3 se estableció temprano en la historia de S. El sistema de clase S4 más complejo se estableció más tarde.

Observaciones

Hay varias funciones para inspeccionar el "tipo" de un objeto. La función más útil es la class , aunque a veces es necesario examinar el mode de un objeto. Ya que estamos discutiendo "tipos", uno podría pensar que typeof sería útil, pero generalmente el resultado del mode será más útil, porque los objetos sin atributo explícito de "clase" tendrán el despacho de funciones determinado por la "clase implícita" determinada por su modo.

Vectores

La estructura de datos más simple disponible en R es un vector. Puede hacer vectores de valores numéricos, valores lógicos y cadenas de caracteres utilizando la función c() . Por ejemplo:

c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1]  TRUE  TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"

También puedes unirte a vectores usando la función c() .

x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6

Se puede encontrar un tratamiento más elaborado sobre cómo crear vectores en el tema "Creación de vectores"

Inspeccionar clases

A cada objeto en R se le asigna una clase. Puede usar class() para encontrar la clase del objeto y str() para ver su estructura, incluidas las clases que contiene. Por ejemplo:

class(iris)
[1] "data.frame"

str(iris)
'data.frame':    150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 ...

class(iris$Species)
[1] "factor"

Vemos que el iris tiene la clase data.frame y el uso de str() nos permite examinar los datos que contiene. La variable Especies en el marco de datos del iris es de factor de clase, en contraste con las otras variables que son de clase numérica. La función str() también proporciona la longitud de las variables y muestra el primer par de observaciones, mientras que la función class() solo proporciona la clase del objeto.

Vectores y listas

Los datos en R se almacenan en vectores. Un vector típico es una secuencia de valores que tienen el mismo modo de almacenamiento (por ejemplo, vectores de caracteres, vectores numéricos). Consulte ?atomic para obtener detalles sobre las clases implícitas atómicas y sus modos de almacenamiento correspondientes: "logical", "integer", "numeric" (synonym "double"), "complex", "character" y "raw" . Muchas clases son simplemente un vector atómico con un atributo de class en la parte superior:

x <- 1826
class(x) <- "Date"
x 
# [1] "1975-01-01"
 x <- as.Date("1970-01-01")
 class(x)
#[1] "Date"
 is(x,"Date")
#[1] TRUE
 is(x,"integer")
#[1] FALSE
 is(x,"numeric")
#[1] FALSE
  mode(x)
#[1] "numeric"

Las listas son un tipo especial de vector donde cada elemento puede ser cualquier cosa, incluso otra lista, de ahí el término R para listas: "vectores recursivos":

mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )

Las listas tienen dos usos muy importantes:

  • Como las funciones solo pueden devolver un solo valor, es común devolver resultados complicados en una lista:

    f <- function(x) list(xplus = x + 10, xsq = x^2)
    
    f(7)
    # $xplus
    # [1] 17
    # 
    # $xsq
    # [1] 49
    
  • Las listas también son la clase fundamental subyacente para los marcos de datos . Bajo el capó, un marco de datos es una lista de vectores que tienen la misma longitud:

    L <- list(x = 1:2, y = c("A","B"))
    DF <- data.frame(L)
    DF
    #   x y
    # 1 1 A
    # 2 2 B
    is.list(DF)
    # [1] TRUE
    

La otra clase de vectores recursivos son las expresiones R, que son "lenguaje" - objetos



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow