Sesión 1: Introducción a R

Análisis Espaciales y Multivariantes en R

Diego Nieto Lugilde

Programa de Doctorado Recursos Naturales y Gestión Sostenible

La estructura de R

  • Funciones: ¿qué deseas hacer?
  • Objetos: ¿con qué o sobre qué quieres hacerlo?
sqrt(16)
[1] 4

Note

Aquí, 16 es el objeto sobre el que aplicamos la función sqrt() (raíz cuadrada)

La estructura de R

Objeto Objeto Función Función Objeto->Función Nuevo objeto Nuevo objeto Función->Nuevo objeto

Llamar a una función

  • Call: Una función con un conjunto particular de objetos
    • función( argumento 1 )
sqrt(16)
[1] 4

Note

El resultado de la función se imprime directamente en pantalla

Asignación de valores a objetos

  • Assign: Una función especial para crear/modificar un objeto
    • Valor específico
    • El resultado de una llamada a una función
x <- 2

Note

Fijaros que el resultado no se imprime en pantalla como antes

x
[1] 2

Múltiples asignaciones para crear objetos

a = 10

a <- 10

10 -> a

Note

Estas tres líneas hacen lo mismo

¿Qué información puede contener un objeto?

Números de cualquier tipo

  • 0, 0.2, Inf
numeric_object <- 0.5

Caracteres (texto)

  • Texto libre
character_object <- "Bromus diandrus"

Warning

Las cadenas de texto se ponen entre comillas para poder usar espacios y para distinguirlos de los objetos

Valores lógicos

  • TRUE (T), FALSE (F)
logical_object <- TRUE

Factores

  • Categorías (e.g., “Planta”, “Animal”, “Hongo”)
factor_object <- factor("Planta")

No data

  • NA
na_object <- NA

¿Qué hace interesantes a los objetos?

  • Entidad con información
  • Se puede reutilizar tantas veces como se quiera
  • Pertenece a una clase, lo que le dota de propiedades propias
  • Cada clase tiene una estructura propia

class() te dice la clase de un objeto

class(numeric_object)
class(logical_object)
class(factor_object)
class(character_object)
class("x")
class(x)

¿Cómo se reutilizan los objetos?

a <- a + 1
b <- a * a
x <- sqrt(b)
x
[1] 11

Muchas funciones aceptan varios objetos

Objeto1 Objeto1 Función Función Objeto1->Función Nuevo objeto Nuevo objeto Función->Nuevo objeto Objeto2 Objeto2 Objeto2->Función Objeto3 Objeto3 Objeto3->Función

Se pasan varios objetos a las funciones separados por comas

sum(15, 16, 17, 24, 10)
[1] 82

Algunos objetos son opciones

Las opciones modifican el comportamiento de las funciones

Objeto1 Objeto1 Función Función Objeto1->Función Nuevo objeto Nuevo objeto Función->Nuevo objeto Objeto2 Objeto2 Objeto2->Función Objeto3 Objeto3 Objeto3->Función Opción Opción Opción->Función

Note

Las opciones en realidad también son objetos. Todos los objetos que requiere una función (i.e. datos y/u opciones) se conocen como argumentos.

Las opciones también se separan por comas

several_data <- c(15, 16, 17, 24, 10, NA)
mean(several_data)
[1] NA

Las opciones también se separan por comas

several_data <- c(15, 16, 17, 24, 10, NA)
mean(several_data)
[1] NA
mean(several_data, na.rm = TRUE)
[1] 16.4

¿Cómo se cuales son los argumentos de una función?

  • Muchas funciones tendrán valores predeterminados para los argumentos
    • Si no se especifica, el argumento tomará ese valor
  • Para encontrar estos valores y una lista de todos los argumentos, puedes usar cualquiera de las siguientes opciones:
    • ?funcion
    • help(funcion)
    • Usar la pestaña Help de Rstudio
help(mean)

¿Qué forma tienen los objetos?

Los objetos pueden tener muchos datos organizados en dimensiones

Vectores numéricos

Se pueden crear secuencias de números de forma sencilla

a <- 1:4
a
[1] 1 2 3 4

Vectores numéricos

Se pueden crear secuencias con la función seq()

a <- seq(1, 10)
a
 [1]  1  2  3  4  5  6  7  8  9 10

Note

Como veremos más adelante. Esta función es muy flexible y permite crear secuencias más complejas.

Vectores numéricos

Se pueden crear secuencias de números no consecutivos con la función c()

a <- c(4, 2, 5, 10)
a
[1]  4  2  5 10

Vectores de texto y factores

species <- c("Bromus diandrus", "Bromus carinatus", "Bison bison")

kingdom <- factor(c("Planta", "Planta", "Animal"))

Valores lógicos

Operadores condicionales: < > <= >= == != %in%

3 < 5
[1] TRUE

Valores lógicos

Operadores condicionales: < > <= >= == != %in%

3 < 5
[1] TRUE
3 > 5
[1] FALSE

Valores lógicos

Operadores condicionales: < > <= >= == != %in%

3 < 5
[1] TRUE
3 > 5
[1] FALSE
x <- 5
x == 5
[1] TRUE

Valores lógicos

Operadores condicionales: < > <= >= == != %in%

3 < 5
[1] TRUE
3 > 5
[1] FALSE
x <- 5
x == 5
[1] TRUE
x != 5
[1] FALSE

Vectores lógicos

x <- 1:10
x < 5
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

Vectores lógicos

x <- 1:10
x < 5
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
x == 2
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

Vectores lógicos

x <- 1:10
x < 5
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
x == 2
 [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
species == ("Bromus diandrus")
[1]  TRUE FALSE FALSE

Extrayendo valores de vectores

  • R usa [ ] para referirse a elementos de objetos
    • V[5] devuelve el 5º elemento de un vector llamado V
  • El número entre corchetes se denomina índice (i)
a <- c(3, 2, 7, 8)

a[3]
# ????

a[1:3]
# ????

a[seq(2, 4)]
# ???

Vamos a probar cosas

  • Ejercicios
  • Parte 1: Trabajando con vectores

¿Qué forma tienen los objetos?

Los objetos pueden tener muchos datos organizados en dimensiones

Matrices

A <- matrix(data = 0, nrow = 6, ncol = 5)
A
     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    0    0    0    0    0
[4,]    0    0    0    0    0
[5,]    0    0    0    0    0
[6,]    0    0    0    0    0

Matrices

A <- matrix(data = 1:30, nrow = 6, ncol = 5)
# ????

Matrices

A <- matrix(data = 1:30, nrow = 6, ncol = 5)
A
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    7   13   19   25
[2,]    2    8   14   20   26
[3,]    3    9   15   21   27
[4,]    4   10   16   22   28
[5,]    5   11   17   23   29
[6,]    6   12   18   24   30

Extrayendo valores de matrices

  • R usa [ ] para referirse a elementos de objetos
  • El orden es siempre [filas, columnas]
    • M[2,3] devuelve el elemento de la 2ª fila, 3ª columna de la matriz M
    • M[2,] devuelve todos los elementos de la 2ª fila de la matriz M
  • Los números entre corchetes se denominan índices (i y j)

Extrayendo valores de matrices

A <- matrix(data = 1:30, nrow = 6, ncol = 5)

A[3, 4]
[1] 21

Extrayendo valores de matrices

A <- matrix(data = 1:30, nrow = 6, ncol = 5)

A[3, 4]

A[c(1:3), 4]
???

Extrayendo valores de matrices

A <- matrix(data = 1:30, nrow = 6, ncol = 5)

A[3, 4]
[1] 21
A[c(1:3), 4]
[1] 19 20 21

¿Pueden los objetos mezclar tipos de datos?

Data frame

  • Un data frame es una lista de vectores de la misma longitud
  • Son equivalente a matrices con diferentes tipos de datos en cada columna
  • Se usan para almacenar diferentes variables a partir de las mismas mediciones

Data frame

df <- data.frame(
    name = c("Diego", "Lucía", "Paco"),
    age = c(27, 23, 24)
    )

Extrayendo información de un data frame

  • Extracción de columnas
    • Data$columnname
    • Data[,”columnname”]
    • Data[,3]
  • Nombre de filas
    • rownames(Data)
  • Nombre de columnas
    • colnames(Data)

¿Probamos cosas?

  • Ejercicios
  • Parte 2: Trabajando con matrices y data.frames

Archivos, objetos y proyectos

Los tres son cosas diferentes en R…

  • Los archivos son scripts (e.g., un archivo de texto) o archivos de datos (e.g., Excel) en el disco duro
  • Los objetos son datos en la sesión de R. Sólo existen en la memoria temporal del ordenador
  • Un proyecto es una carpeta con un montón de archivos y objetos de R
    • Es recomendable usar una estructura de carpetas lógica
  • Carpeta/
    • Datos/
    • Figuras/
    • Tablas/
    • Script_1.R
    • Script_2.R
    • Script_3.R

Entorno, sesión o environment de R

  • El espacio temporal en la memoria del equipo donde R guarda objetos mientras ejecuta un análisis
  • Está limitado en tamaño por la memoria RAM del ordenador

Funciones útiles para controlar la sesión de trabajo

  • Para enumerar objetos en la sesión de R: ls()
  • Para eliminar objetos de la sesión de R: rm()
  • Para guardar la sesión de R: save.image()
  • Para salir de la sesión de R: q()
ls()
rm(numeric_object, character_object)
save.image()
rm(list=ls())

Directorio de trabajo (= carpeta del proyecto)

  • Es el directorio donde R busca archivos o escribe archivos
  • En una sesión de R, las referencias a archivos se hacen desde el directorio de trabajo
    • Es conveniente usar rutas relativas a los ficheros

getwd() obtener el directorio de trabajo

setwd() lo cambia

Trabajar con datos

  • Lectura de datos del disco duro
  • R lo almacena como un objeto (guardado en la memoria de su computadora)
  • Trata ese objeto como cualquier otro objeto
  • Los cambios en el objeto están restringidos al objeto, no afectan a los datos del disco duro
myData <- read.csv("some data.csv")

Escribir un archivo de datos

write.csv(myData, "updated data.csv")

¿Mucho más conveniente usar ficheros excel?

install.packages("openxlsx")
library(openxlsx)
data <- read.xlsx("data", sheet = 1)

Scripts

  • Archivos de texto
  • Con llamadas a funciones (código)
  • Ordenado y secuencial:
    • Cargar datos
    • Modificar datos
    • Análisis de datos
    • Guardar/trazar resultados
  • Puede/debe contener comentarios legibles por humanos
    • Usar # antes del comentario

Note

No se manejan desde la consola de R, si no desde la interfaz de Rstudio.

Seguimos practicando

  • Ejercicios
  • Parte 3: Usando ficheros de datos

Paquetes en R

¿Qué son los paquetes en R?

Conjuntos de funciones para un objetivo concreto

¿Donde se encuentran esos paquetes?

Se encuentran recopilados en un repositorio llamado CRAN (Comprehensive R Archive Network)

¿Cómo instalo paquetes de CRAN?

install.packages("openxlsx")
package 'openxlsx' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\diego\AppData\Local\Temp\RtmpCeO0Kt\downloaded_packages

¿Cómo uso las funciones de una librería?

Tienes dos opciones, dependiendo de si…

  • Vas usar sus funciones de forma continuada
  • Sólo quieres usar una función de forma puntual
# Uso intensivo de sus funciones
library(openxlsx)
read.xlsx()
write.xlsx()

# Uso puntual de una función
openxlsx::read.xlsx()

¿Puedo encontrar paquetes en algún otro sitio?

Si. Puedes encontrar paquetes sin organizar en Internet. Algunos sitios frecuentes son GitHub, GitLab, o similares.

¿Cómo puedo instalar paquetes de GitHub?

install.packages("devtools")
package 'devtools' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\diego\AppData\Local\Temp\RtmpCeO0Kt\downloaded_packages

¿Cómo puedo instalar paquetes de GitHub?

install.packages("devtools")
package 'devtools' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\diego\AppData\Local\Temp\RtmpCeO0Kt\downloaded_packages
library(devtools)

¿Cómo puedo instalar paquetes de GitHub?

install.packages("devtools")
library(devtools)

install_github("colearendt/xlsx")
## o
devtools::install_github("colearendt/xlsx")

Graficado

Generación de gráficos nuevos

plot() es una función genérica que funciona con muchos objetos diferentes

# plot(x, y)
plot(5, 1)

También con funciones específicas para gráficos concretos…

Histogramas

x <- rnorm(10, 5, 3)

hist(x)

Gráficas de barras

x <- rnorm(10, 5, 3)
names(x) <- paste0("tr_", 1:10)

barplot(x)

Gráficas de barras apiladas o paralelas

x <- matrix(rnorm(30, 5, 3), nrow = 3, ncol = 10)
colnames(x) <- paste0("tr_", 1:10)
rownames(x) <- c("high", "med", "low")

barplot(x, legend = TRUE)

Boxplots

x <- rnorm(30, 5, 3)
y <- rep(c("high", "med", "low"), 10)
dat <- data.frame(size = x, group = y)

boxplot(size ~ group, dat)

Puedo pasarle múltiples valores

x <- 1:10
y <- 10:1

plot(x, y)

Puedo pasarle múltiples valores

x <- 1:10
y <- 10:1

plot(x, y, main = "A plot", xlab = "Temperature",
    ylab = "Pirates")

Puedo cambiar la conexión entre puntos…

x <- 1:10
y <- 10:1

par(mfrow = c(2, 3))
plot(x, y)
plot(x, y, type = "l")
plot(x, y, type = "b")
plot(x, y, type = "h")
plot(x, y, type = "o")
plot(x, y, type = "s")

… pero cuidado con el orden de los datos

x <- sample(1:10, 10)
y <- sample(1:10, 10)

par(mfrow = c(2, 3))
plot(x, y)
plot(x, y, type = "l")
plot(x, y, type = "b")
plot(x, y, type = "h")
plot(x, y, type = "o")
plot(x, y, type = "s")

Puedo cambiar el tipo de puntos

x <- 1:10

par(mfrow = c(3, 1))
plot(x, rep(1, 10))
plot(x, rep(1, 10), pch = 2)
plot(x, rep(1, 10), pch = 1:10)

Puedo cambiar el tamaño de puntos

x <- 1:10
y <- 1:10

par(mfrow = c(3, 1))
plot(x, y)
plot(x, y, cex = 2)
plot(x, y, 
     cex = seq(1, 3, 
               length.out = 10))

Puedo cambiar los colores

  • Usando el nombre
  • Usando funciones para generar colores
x <- rep(1:10, 10)
y <- rep(1:10, each = 10)

par(mfrow = c(2, 2))
plot(x, y, pch = 15)
plot(x, y, pch = 15,
     col = "dark green")
plot(x, y, pch = 15,
     col = "#352575")
plot(x, y, pch = 15,
     col = rgb(0.8,0.1,0.2))

Muchas más opciones en la función par()

70 opciones diferentes para controlar los gráficos!

?par

Añadiendo información a gráficos existentes

  • points(x, y) añade puntos a gráficos (opciones similares a plot())

  • segments(x0, y0, x1, y1) añade líneas, desde un punto a otro

  • polygon(x, y) añade polígonos

Guardando gráficos en el disco duro

x <- rep(1:10, 10)
y <- rep(1:10, each = 10)

pdf("figures/Figure_1.pdf") 

plot(x, y, pch = 15, cex = 2, col = rgb(0.8, 0.1, 0.2))

dev.off()
png 
  2 

Algunos ejemplos de figuras

¿Como visualizo cuando tengo grandes cantidades de datos?

x <- rnorm(20000)
y <- rnorm(20000)

plot(x, y)

¿Como visualizo cuando tengo grandes cantidades de datos?

install.packages("hexbin") 
library(hexbin)

hbin <- hexbin(x, y, xbins = 40)

plot(hbin)

package 'hexbin' successfully unpacked and MD5 sums checked

The downloaded binary packages are in
    C:\Users\diego\AppData\Local\Temp\RtmpCeO0Kt\downloaded_packages

Vamos a practicar

  • Ejercicios
  • Parte 4: Gráficas y figuras