Introducción al R (Parte II)

Kenneth Cabrera
miércoles, 18 de septiembre de 2019

Clases de objetos

El R tiene como clases de objetos básicos o “atómicos”

  • character (alfanumérico).
  • numeric (reales).
  • integer (enteros).
  • complex (complejos).
  • logical (lógicos TRUE/FALSE).

Objetos

El objeto más básico es un vector.

  • Un vector sólo puede tener objetos de la misma clase.
  • Una lista puede contener objetos de diferentes clases.
  • Un vector vacío se crea con la función vector()

Números

  • Los números en R se tratan como objetos numéricos (reales de doble precisión).
  • Si quieres especificar un entero deberá finalizarlo con L.
  • Números especiales: Inf, representa el infinito.
  • El valor NA es un valor faltante (“Not Available”)
  • El valor NaN es un valor no definido (“Not a Number”).

Atributos

Un objeto en R puede tener atributos como:

  • nombres (names, dimnames).
  • dimensiones (dim).
  • clase (class).
  • longitud (length).
  • Otros metadatos y atributos particulares.

Se utiliza la función attribute() para inspeccionarlos.

Asignación

El símbolo <- es el operador de asignación. También se utiliza -> para realizar la asignación de izquierda a derecha.

x <- 1
print(x)
[1] 1
45 -> y
print(y)
[1] 45

Salida

x <- 1:20
x
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

El operador dos puntos (:) crea secuencias.

Vectores I

x <- c(0.5, 0.6)      ## numérico
class(x)
[1] "numeric"
x <- c(TRUE, FALSE)   ## lógico
x <- c(TRUE, FALSE)   ## lógico
x <- c("a", "b", "c") ## alfanumérico, carácter, sarta.

Vectores II

x <- c(0.5, 0.6)      ## numérico
x <- 9:29             ## entero
x <- c(1+0i, 2+4i)    ## complejo
# Uso de la función vector().
x <- vector("numeric", length = 10)
x
 [1] 0 0 0 0 0 0 0 0 0 0

Vectores III

x <- 1
class(x)
[1] "numeric"
x <- 1L
class(x)
[1] "integer"

Mezcla de objetos (conversión implícita)

y <- c(1.7, "a")
y <- c(TRUE, 2)
y <- c("a", TRUE)

Conversión explícita I.

x <- 0:6
class(x)
[1] "integer"
as.numeric(x)
[1] 0 1 2 3 4 5 6
as.logical(x)
[1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

Conversión explícita II.

x <- 0:6
as.character(x)
[1] "0" "1" "2" "3" "4" "5" "6"
as.complex(x)
[1] 0+0i 1+0i 2+0i 3+0i 4+0i 5+0i 6+0i

Conversión explícita II.

x <- c("a", "b", "c")
as.numeric(x)
[1] NA NA NA
as.logical(x)
[1] NA NA NA
as.complex(x)
[1] NA NA NA

Matrices I

m <- matrix(nrow = 2, ncol = 3)
m
     [,1] [,2] [,3]
[1,]   NA   NA   NA
[2,]   NA   NA   NA
dim(m)
[1] 2 3
attributes(m)
$dim
[1] 2 3

Matrices II

m <- matrix(1:6, nrow = 2, ncol = 3)
m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

Matrices III

m <- 1:10
m
 [1]  1  2  3  4  5  6  7  8  9 10
dim(m) <- c(2, 5)
m
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

Concatenación por fila o por columna

x <- 1:3
y <- 10:12
cbind(x, y)
     x  y
[1,] 1 10
[2,] 2 11
[3,] 3 12
rbind(x, y)
  [,1] [,2] [,3]
x    1    2    3
y   10   11   12

Listas

x <- list(1, "a", TRUE, 1 + 4i)
x
[[1]]
[1] 1

[[2]]
[1] "a"

[[3]]
[1] TRUE

[[4]]
[1] 1+4i

Factores

Los factores se usan para representar variables categóricas. Pueden ser ordenados o no ordenados. Y se pueden asimilar a un vector donde cada categoría tiene una etiqueta.

  • Se usan en modelación como lm() y glm().
  • Ahorran espacio y codifican con etiquetas legibles variables categóricas.

Factores

x <- factor(c("si", "si", "no", "si", "no"))
levels(x)
[1] "no" "si"
unclass(x)
[1] 2 2 1 2 1
attr(,"levels")
[1] "no" "si"

Factores

x <- factor(c("si", "si", "no", "si", "no"))

as.numeric(x)
[1] 2 2 1 2 1
x <- factor(x, levels = c("si","no"))
levels(x)
[1] "si" "no"
as.numeric(x)
[1] 1 1 2 1 2

Valores faltantes

  • is.na() Se usa para probar si los objetos son NA.
  • is.nan() para los valores NaN.
  • NA existen tantos numéricos NA como de sarta <NA>.
  • Un valor NaN es NA pero no al contrario.

Valores faltantes I

x <- c(1, 2, NA, 10, 3, 0/0, 3/0, log(0))
is.na(x)
[1] FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE
is.nan(x)
[1] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE

Bases de datos (data frames)

  • Son un tipo de lista, donde cada elemento de la lista tiene la misma longitud.
  • Cada elemento de la lista es una columa y la longitud de cada elemento de la lista es el número de filas.
  • A diferencia de las matrices los data.frame permiten tipos distintos para cada columna. En las matrices todos son de la misma clase.
  • Los data.frame tienen atributos como row.names.
  • Se crean mediante funciones como read.table() o read.csv().
  • Se pueden convertir a matrices con data.matrix().

Bases de datos (data frames)

x <- data.frame(foo = 1:4, bar = c(T, T, F, F))
x
  foo   bar
1   1  TRUE
2   2  TRUE
3   3 FALSE
4   4 FALSE
nrow(x)
[1] 4
ncol(x)
[1] 2

Nombres de los objetos (vectores)

x <- 1:3
names(x)
NULL
names(x) <- c("foo", "bar", "norf")
x
 foo  bar norf 
   1    2    3 
names(x)
[1] "foo"  "bar"  "norf"

Nombres de los objetos (listas)

x <- list(a = 1, b = 2, c = 3)
x
$a
[1] 1

$b
[1] 2

$c
[1] 3

Nombres de los objetos (matrices)

m <- matrix(1:4, nrow = 2, ncol = 2)
m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
dimnames(m) <- list(c("a", "b"),c("c", "d"))
m
  c d
a 1 3
b 2 4

Subconjuntos en listas

  • [ Siempre devuelve un objeto de la misma clase que el original.
  • [[ Es usado para extraer los elementos de una lista. Sólo para extraer un elmento de la lista. Lo que devuelve puede ser de distinto tipo al de la lista o el data.frame.
  • $ se usa para extraer elementos de una lista o data.frame. Semánticamente es similar a [[.

Ejemplo de subconjuntos I

x <- c("a", "b", "c", "c", "d", "a")
x[1]
[1] "a"
x[2]
[1] "b"
x[1:4]
[1] "a" "b" "c" "c"

Ejemplo de subconjuntos II

x <- c("a", "b", "c", "c", "d", "a")
x > "a"
[1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE
x[x > "a"]
[1] "b" "c" "c" "d"
u <- x > "a"
x[u]
[1] "b" "c" "c" "d"

Subconjuntos (matrix) I

x <- matrix(6:1, 2, 3)
x[1, 2]
x[2, 1]

x[1,]

x[,2]

Subconjuntos (matriz) II

x <- matrix(6:1, 2, 3)
x[1, 2]
x[1, 2, drop = FALSE]

Subconjuntos (matriz)

x <- matrix(6:1, 2, 3)
x[1, ]
x[1, , drop = FALSE]

Ejemplo subconjuntos (listas) I

x <- list(foo = 6:1, bar = 0.6)
x[1]
$foo
[1] 6 5 4 3 2 1
x[[1]]
[1] 6 5 4 3 2 1

Ejemplo subconjuntos (listas) II

x$bar
[1] 0.6
x[["bar"]]
[1] 0.6
x["bar"]
$bar
[1] 0.6

Ejemplo subconjuntos (listas) III

x <- list(foo = 6:1, bar = 0.6, baz = "hello")
x[c(1,3)]
$foo
[1] 6 5 4 3 2 1

$baz
[1] "hello"

Ejemplo subconjuntos (listas) IV

x <- list(foo = 6:1, bar = 0.6, baz = "hello")
nombre <- "foo"
x[[nombre]]
[1] 6 5 4 3 2 1
x$nombre
NULL
x$foo
[1] 6 5 4 3 2 1

Ejemplo subconjuntos (listas) V

x <- list(a = list(10, 12, 14), b = c(3.14, 2.81))
x[[c(1,3)]]
[1] 14
x[[1]][[3]]
[1] 14
x[[c(2,1)]]
[1] 3.14