Introducción a R

Autores: Amparo Baíllo y José R. Berrendero

Temas

  1. Características básicas del programa
  2. Principales tipos de objetos

¿Qué es R?

R es un conjunto integrado de funciones para manejo de datos, cálculo y gráficos

La aplicabilidad de R se puede extender mediante paquetes de funciones. La distribución básica contiene aproximadamente 25 paquetes.

Un poco de historia

¿Por qué aprender R?

Algunos enlaces

Características básicas

Área y directorio de trabajo

Práctica 1: el primer contacto con R

Tipos de objetos en R

Vectores: comandos para generarlos

1:5
## [1] 1 2 3 4 5
seq(2, 10, 2)
## [1]  2  4  6  8 10
rep(c(1,3), 4)
## [1] 1 3 1 3 1 3 1 3

Vectores: reciclaje

3 + c(1,2,3)
## [1] 4 5 6
c(1,2) + c(7,8,9)
## Warning in c(1, 2) + c(7, 8, 9): longitud de objeto mayor no es múltiplo de
## la longitud de uno menor
## [1]  8 10 10

Vectores: valores especiales

Inf = Infinito

3/0 # un número distinto de 0 dividido por 0 da infinito 
## [1] Inf

NaN = Not a Number = resultado imposible de calcular

0/0 # 0 dividido por 0 es una indeterminación
## [1] NaN

NA = Not Available = representa un valor numérico perdido

Los siguientes datos son medidas morfométricas de 8 pájaros:longitud del ala (Wingcrd), pata (Tarsus), cabeza (Head) y peso (Wt).

Datos = read.table("MorphBirds.txt",header=TRUE)
Datos
##   Wingcrd Tarsus Head   Wt
## 1    59.0   22.3 31.2  9.5
## 2    55.0   19.7 30.4 13.8
## 3    53.5   20.8 30.6 14.8
## 4    55.0   20.3 30.3 15.2
## 5    52.5   20.8 30.3 15.5
## 6    57.5   21.5 30.8 15.6
## 7    53.0   20.6 32.5 15.6
## 8    55.0   21.5   NA 15.7

Vectores: filtrado

x <- (1:5)^2
x[2]
## [1] 4
x[c(2,5)]
## [1]  4 25
x[-c(2,5)]
## [1]  1  9 16
x <- (1:5)^2
x[x > 15]
## [1] 16 25
which(x>15)
## [1] 4 5

Vectores: variables lógicas

Toman los valores TRUE y FALSE

Se generan al evaluar condiciones:

x = rnorm(7)
x > 0
## [1]  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE

Se usan operadores lógicos para escribir condiciones más complejas:

< , <= , > , >= , == , != , & , | , !

En operaciones aritméticas TRUE toma el valor 1 y FALSE toma el valor 0

x <- -10:20
sum(x>0)
## [1] 20
sum(x==0)
## [1] 1

Ejercicio: Escribe una línea de código que determine el número de coordenadas de un vector que son menores que -1 o mayores que 2.

Factores

respuesta <- c('si', 'no', 'si', 'no', 'no', 'no', 'si')
respuesta <- factor(respuesta)
respuesta
## [1] si no si no no no si
## Levels: no si
data = c(1,2,2,3,1,2,3,3,1,2,3,3,1)
fdata = factor(data)
fdata
##  [1] 1 2 2 3 1 2 3 3 1 2 3 3 1
## Levels: 1 2 3
rdata = factor(data, labels=c("I","II","III"))
rdata
##  [1] I   II  II  III I   II  III III I   II  III III I  
## Levels: I II III

Cálculos por niveles: Se usa la función tapply cuando queremos llevar a cabo un cálculo para los valores correspondientes a cada nivel de un factor.

respuesta
## [1] si no si no no no si
## Levels: no si
edades <- c(20, 25, 34, 20, 37, 43, 40)
tapply(edades, respuesta, mean)
##       no       si 
## 31.25000 31.33333

Matrices

matrix(1:3, nrow = 2, ncol = 3)
##      [,1] [,2] [,3]
## [1,]    1    3    2
## [2,]    2    1    3
x <- matrix(1:9, 3,3)
x
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
c(1,2) + x
## Warning in c(1, 2) + x: longitud de objeto mayor no es múltiplo de la
## longitud de uno menor
##      [,1] [,2] [,3]
## [1,]    2    6    8
## [2,]    4    6   10
## [3,]    4    8   10
x <- matrix(5:15, 3, 3)
## Warning in matrix(5:15, 3, 3): la longitud de los datos [11] no es un
## submúltiplo o múltiplo del número de filas [3] en la matriz
x
##      [,1] [,2] [,3]
## [1,]    5    8   11
## [2,]    6    9   12
## [3,]    7   10   13
x[x>6]
## [1]  7  8  9 10 11 12 13

Extraer submatrices

x[1,2]
## [1] 8
x[,3]
## [1] 11 12 13
x[3,-1]
## [1] 10 13

Pegar vectores

y <- 1:3
z <- 4:6
cbind(y,z)
##      y z
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
rbind(y,z)
##   [,1] [,2] [,3]
## y    1    2    3
## z    4    5    6

Aplicar funciones a filas o columnas

x
##      [,1] [,2] [,3]
## [1,]    5    8   11
## [2,]    6    9   12
## [3,]    7   10   13
mean(x)
## [1] 9
apply(x,2,mean)
## [1]  6  9 12

Matrices: operaciones más habituales

A = matrix(1:4,2,2) ; B = matrix(5:8,2,2)
A %*% B
##      [,1] [,2]
## [1,]   23   31
## [2,]   34   46
det(A)
## [1] -2
A * B
##      [,1] [,2]
## [1,]    5   21
## [2,]   12   32
t(A)
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
diag(A)
## [1] 1 4
solve(A)
##      [,1] [,2]
## [1,]   -2  1.5
## [2,]    1 -0.5
eigen(A) # Devuelve una lista 
## eigen() decomposition
## $values
## [1]  5.3722813 -0.3722813
## 
## $vectors
##            [,1]       [,2]
## [1,] -0.5657675 -0.9093767
## [2,] -0.8245648  0.4159736
b = c(1,3)
solve(A,b)
## [1]  2.5 -0.5

Listas

milista <- list(nombre='Pepe',no.hijos=3,
edades.hijos=c(4,7,9)) 
str(milista)
## List of 3
##  $ nombre      : chr "Pepe"
##  $ no.hijos    : num 3
##  $ edades.hijos: num [1:3] 4 7 9
milista$nombre
## [1] "Pepe"

Los componentes de la lista están numerados:

milista[[1]]
## [1] "Pepe"

También podemos extraer las componentes así:

milista$edades.hijos
## [1] 4 7 9
milista$edades.hijos[2]
## [1] 7
AutoV = eigen(A) # Autovalores y autovectores de A
AutoV$values
## [1]  5.3722813 -0.3722813
AutoV[[2]]
##            [,1]       [,2]
## [1,] -0.5657675 -0.9093767
## [2,] -0.8245648  0.4159736

Data frames

x <- 7:9
y <- c('a','b','c')
mifichero <- data.frame(edad=x, grupo=y)
mifichero
##   edad grupo
## 1    7     a
## 2    8     b
## 3    9     c
mifichero$edad
## [1] 7 8 9
mifichero[1,]
##   edad grupo
## 1    7     a
sapply(faithful,summary)
##         eruptions  waiting
## Min.     1.600000 43.00000
## 1st Qu.  2.162750 58.00000
## Median   4.000000 76.00000
## Mean     3.487783 70.89706
## 3rd Qu.  4.454250 82.00000
## Max.     5.100000 96.00000
Práctica 2: tipos de objetos en R

Cargar librerías (packages) en R

Podemos ver la lista de librerías instaladas en nuestro ordenador pinchando en la pestaña Packages.

Las que están cargadas en la actual sesión de R aparecen marcadas con \(\LARGE \checkmark\).

Si una librería no está cargada, podemos cargarla marcando con \(\LARGE \checkmark\) o escribiendo en la consola:

library("splines")

Si una librería no aparece en la lista es porque no está instalada. Para instalar una librería, pinchamos en Install (pestaña Packages), escribimos el nombre de la librería en el cuadro de diálogo y pinchamos en el botón Install del cuadro de diálogo.

Importar datos a R

Desde un fichero de texto situado en una web

enlace <- 'http://verso.mat.uam.es/~joser.berrendero/datos/notas.txt'
notas <- read.table(enlace, sep = " ", dec = ",", header = TRUE)

Significado de las opciones utilizadas:

argumento valor efecto
sep Espacio en blanco El carácter que se usa para separar variables
dec , Una coma separa la parte entera y la decimal de cada número
header TRUE La primera línea contiene los nombres de las variables

Cómo importar datos desde un fichero excel

Hay más de una librería que podemos utilizar: XLConnect, Readxl, gdata, xlsx.

También podemos hacerlo “manualmente”: en la esquina superior derecha del RStudio, pinchamos en Import Dataset dentro de la pestaña Environment. Seleccionamos el tipo de fichero que queramos importar y luego lo buscamos en el equipo. Finalmente pinchamos en el botón Import.