Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y...

108
Introducci´on a R Dpto. Ciencias de la Computaci´ on e Inteligencia Artificial Universidad de Sevilla

Transcript of Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y...

Page 1: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Introduccion a R

Dpto. Ciencias de la Computacion e Inteligencia ArtificialUniversidad de Sevilla

Page 2: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Contenidos

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 3: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 4: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Introduccion

Instalacion

• El proyecto R (Windows, Mac-OS, Linux,. . . )

• Licencia GPL

• R-Studio Un entorno de desarrollo

Descripcion

• Lenguaje para el analisis de dato y la modelizacion.

• Analisis grafico y estadıstico

• Lenguaje de programacion orientado a objetos

• Ampliable a traves de numerosas bibliotecas disponibles

Page 5: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Bibliografıa

• Zuur, Alain; Ieno, Elena N.; Meesters, Erik “A Beginner’sGuide to R” (Springer, 2009)

• Manuales basicos que acompanan a R

• Documentacion en espanol

• Recomendados:• An Introduction to R• The R Guide

Page 6: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Guiones/Script

• Conjunto de instrucciones que el interprete debe calcularsucesivamente.

• Las expresiones se escriben en ficheros de texto (con extension.R) y se envıan a la consola de R

Page 7: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

R-Studio

Page 8: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Espacio de trabajo

Espacio de trabajo (workspace)

• Conjunto de objetos definidos durante una sesion de trabajocon R que no se han borrado expresamente.• Fichero con extension .RData• Se carga con la instruccion load

Page 9: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Directorio de trabajo

Directorio de trabajo (Working Directory)Lugar de referencia que utiliza R para localizar los ficheros que leey escribe

• getwd()

• setwd(’directorio’)

Page 10: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Extensiones

Es posible extender R a traves de paquetes/bibliotecas.

• lattice: Biblioteca de graficoslibrary(lattice)

• ade4: Analisis de datos ecologicos

• class: Funciones de clasificacion

• seqinr: Analisis de secuencias• Existen multiples repositorios

• Bioconductor: http://www.bioconductor.org

install.packages("bioconductor",repos="www.bioconductor.org")

Page 11: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Extensiones

Page 12: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Ayuda

> ?mean

> help(mean)

> ??regresion

> help.search(’regression’)

• Description: Breve descripcion.

• Usage: Nombre de los argumentos y sus valores por defecto.

• Arguments: Descripcion detallada de cada argumento.

• Details: Descripcion detallada del comportamiento.

• Value: Descripcion detallada del valor devuelto por la funcion.

• See Also: Otras ayudas relacionadas.

• Examples: Ejemplos de uso.

Page 13: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Ayuda

Page 14: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Primeras nociones

• R distingue entre mayusculas y minusculas

> a <- 3

> A <- 5

> a

[1] 3

> A

[1] 5

• Identificadores validos: Cualquier combinacion de sımbolosalfanumericos junto con el punto y . No puede empezar conun dıgito.

• No renombrar los objetos (pi,. . . ) y/o funciones (c, t,. . . )de R.

Page 15: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Expresiones/Asignaciones

• Hay dos tipos de comandos: expresiones y asignaciones• Expresion. El resultado se muestra por pantalla y no se guarda.

> rnorm(5)

[1] 0.71690438 0.07539554 0.73687196 -0.43048351 -0.31119274

• Asignacion: no se muestra nada y se guarda

> v <- rnorm(4)

> v

[1] 0.46212728 -0.87838057 0.83872171 0.01630945

Page 16: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 17: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Markdown

• Creacion de documentos con formato

• Nacio para construir paginas html a partir de documentos detexto plano (sin formato).

Page 18: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Evolucion

Rapidamente extendido/adaptado/modificado para multiplesaplicaciones

Blogs https://en.support.wordpress.com/

markdown-quick-reference/

Whatsapp

Page 19: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

R Markdown

• Creacion de documentos y presentaciones con codigo R

• Multiples formatos: HTML, MS Word, PDF (hay que tenerTeX instalado)

• http://rmarkdown.rstudio.com/

• install.packages("rmarkdown")

Page 21: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 22: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Vectores

• La estructura de datos mas simple.

• Coleccion ordenada de datos (todos del mismo tipo). Coercion

> x <- c(1, 2.5, c(4.2, 9, 7), FALSE) ; x

[1] 1.0 2.5 4.2 9.0 7.0 0.0

> x[1] <- 9 ; x

[1] 9.0 2.5 4.2 9.0 7.0 0.0

• Operaciones vectorizadas (se aplican a cada elemento)

• El mas corto se recicla (hasta la longitud del mas largo).

> y <- c(x,0,x) ; length(y)

[1] 13

> v <- 2*x + y + 1

Mensajes de aviso perdidos

In 2 * x + y :

longitud de objeto mayor no es multiplo de longitud de menor

> v

[1] 28.0 8.5 13.6 28.0 22.0 1.0 19.0 15.0 11.9 23.2 24.0 8.0 19.0

Page 23: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Vectores

• La estructura de datos mas simple.

• Coleccion ordenada de datos (todos del mismo tipo). Coercion

> x <- c(1, 2.5, c(4.2, 9, 7), FALSE) ; x

[1] 1.0 2.5 4.2 9.0 7.0 0.0

> x[1] <- 9 ; x

[1] 9.0 2.5 4.2 9.0 7.0 0.0

• Operaciones vectorizadas (se aplican a cada elemento)

• El mas corto se recicla (hasta la longitud del mas largo).

> y <- c(x,0,x) ; length(y)

[1] 13

> v <- 2*x + y + 1

Mensajes de aviso perdidos

In 2 * x + y :

longitud de objeto mayor no es multiplo de longitud de menor

> v

[1] 28.0 8.5 13.6 28.0 22.0 1.0 19.0 15.0 11.9 23.2 24.0 8.0 19.0

Page 24: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Generacion de secuencias

• El operador : (tiene la maxima precedencia)

> c(10:15,5:-5)

[1] 10 11 12 13 14 15 5 4 3 2 1 0 -1 -2 -3 -4 -5

• La funcion seq

> seq(1, 15,by=3) ; seq(15,1,length.out=5)

[1] 1 4 7 10 13

[1] 15.0 11.5 8.0 4.5 1.0

• La funcion rep

> rep(c(1,2,3), times=3)

[1] 1 2 3 1 2 3 1 2 3

> rep(c(1,2,3), each=3)

[1] 1 1 1 2 2 2 3 3 3

> rep(c(1,2,3), times=c(3,2,1))

[1] 1 1 1 2 2 3

Page 25: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Operaciones elementales

• +, -, *, /, , %%, %/%, sum, prod, cumsum, cumprod

• sin, cos, tan, asin, acos, atan, abs, sqrt, diff

• log, exp, max, min, pmax, pmin, cummax, cummin

• rev, range, length, sort, order

• summary, mean, median, var, sd, quantile, IQR

• round, ceiling, floor, trunc, signif

> x

[1] 1.0 2.5 4.2 9.0 7.0 0.0

> max(x)

[1] 9

> sort(x)

[1] 0.0 1.0 2.5 4.2 7.0 9.0

> order(x) ; x[order(x)]

[1] 6 1 2 3 5 4

[1] 0.0 1.0 2.5 4.2 7.0 9.0

Page 26: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Inf, NA, NaN

> sqrt(-1)

[1] NaN

> sqrt(-1+0i)

[1] 0+1i

> pi

[1] 3.141593

> 7 / 0

[1] Inf

> (- 6) / 0

[1] -Inf

> 0 / 0

[1] NaN

> Inf - Inf ; 2 * Inf + 5

[1] NaN

[1] Inf

> x ; x[c(3,13,5,15)]

[1] 1.0 2.5 4.2 9.0 7.0 0.0

[1] 4.2 NA 7.0 NA

Page 27: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Operaciones de conjuntos

• union, intersect, setdiff, setequal, is.element,

%in%, match

> conj1 <- unique(c(1,2,3,4,3,2,3,1,4)) ; conj1

[1] 1 2 3 4

> conj2 <- c(3,4,5)

> conj3 <- c(2,4,3,1)

> intersect(conj1,conj2)

[1] 3 4

> setequal(conj1,conj3)

[1] TRUE

> is.element(2,conj1)

[1] TRUE

> c(2,6,4,8) %in% conj1

[1] TRUE FALSE TRUE FALSE

> match(c(2,1),conj3)

[1] 1 4

Page 28: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Cadenas de caracteres

• Delimitadas por ", ’

• \\, \", \n, \t> paste(c("X","Y"), 1:10, sep="")

[1] "X1" "Y2" "X3" "Y4" "X5" "Y6" "X7" "Y8" "X9" "Y10"

> strsplit(c("acgtca","acgtaccgtacgact"), split="")

[[1]]

[1] "a" "c" "g" "t" "c" "a"

[[2]]

[1] "a" "c" "g" "t" "a" "c" "c" "g" "t" "a" "c" "g" "a" "c" "t"

> strsplit(c("acgtca","acatgaccgtatgact"), split="atg")

[[1]]

[1] "acgtca"

[[2]]

[1] "ac" "accgt" "act"

Page 29: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Valores logicos

• Comparacion: ==, !=, <, <=, >, >=

• Operadores: &, &&, |, ||, xor, !

> x <- 11:20

> !(x > 15)

[1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE

> x < 13 | x >= 17

[1] TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE

> ((-2:2) >= 0) & ((-2:2) <= 0)

[1] FALSE FALSE TRUE FALSE FALSE

> ((-2:2) >= 0) && ((-2:2) <= 0)

[1] FALSE

> ((1:10) < 5) | ((1:10) > 8)

[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE

> ((1:10) < 5) || ((1:10) > 8)

[1] TRUE

Page 30: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Seleccion/Modificacion de datos

• Vector de posiciones

> x

[1] 11 12 13 14 15 16 17 18 19 20

> x[c(1,2,3,2,21)]

[1] 11 12 13 12 NA

> x[11] <- 21 ; x

[1] 11 12 13 14 15 16 17 18 19 20 21

> x[c(1,2,3)] <- 3:1 ; x

[1] 3 2 1 14 15 16 17 18 19 20 21

> x[1:3] <- c(5,6)

Mensajes de aviso perdidos

In x[1:3] <- c(5, 6) :

numero de items para para sustituir no es un multiplo de ...

> x

[1] 5 6 5 14 15 16 17 18 19 20 21

> x <- c(11,12,13,x[4:10]) ; x

[1] 11 12 13 14 15 16 17 18 19 20

Page 31: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Seleccion de datos

• Vector de exclusiones> x[-c(1,7,5)]

[1] 12 13 14 16 18 19 20

• Vector de valores logicos

> y <- 1:10; x[y > 5]

[1] 16 17 18 19 20

> x[c(TRUE,FALSE,FALSE)]

[1] 11 14 17 20

• Vector de nombres> names(x) <- letters[1:10] ; x

a b c d e f g h i j

11 12 13 14 15 16 17 18 19 20

> x[c(’b’,’f’,’c’)]

b f c

12 16 13

Page 32: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Algunos ejemplos

> x <- c(2, 3, 5, 7, 11, 13)

> which.max(x)

[1] 6

> which(x > 5)

[1] 4 5 6

> length(x > 5)

[1] 6

> length(which(x > 5))

[1] 3

> sum(x > 5)

[1] 3

> sum(x[x > 5])

[1] 31

> x < 3 | x > 5

[1] TRUE FALSE FALSE TRUE TRUE TRUE

> which(x < 3 | x > 5)

[1] 1 4 5 6

> length(which(x < 3 | x > 5))

[1] 4

> sum(x < 3 | x > 5)

[1] 4

Page 33: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otros tipos de conjuntos de datos

• Arrays y matrices (matrix): representacion multidimensionalde los vectores. Todos los elementos de la matriz han de serdel mismo tipo.

• Factores (factor): utiles para el uso de datos categoricos.

• Listas (list): generalizacion de los vectores donde loselementos pueden ser de diferentes tipos (incluso vectores onuevas listas).

• Data frames: listas donde los diferentes elementos tienen lamisma longitud.

• Funciones (function): conjunto de codigo de R ejecutable yparametrizable.

Page 34: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otros tipos de conjuntos de datos

• Arrays y matrices (matrix): representacion multidimensionalde los vectores. Todos los elementos de la matriz han de serdel mismo tipo.

• Factores (factor): utiles para el uso de datos categoricos.

• Listas (list): generalizacion de los vectores donde loselementos pueden ser de diferentes tipos (incluso vectores onuevas listas).

• Data frames: listas donde los diferentes elementos tienen lamisma longitud.

• Funciones (function): conjunto de codigo de R ejecutable yparametrizable.

Page 35: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otros tipos de conjuntos de datos

• Arrays y matrices (matrix): representacion multidimensionalde los vectores. Todos los elementos de la matriz han de serdel mismo tipo.

• Factores (factor): utiles para el uso de datos categoricos.

• Listas (list): generalizacion de los vectores donde loselementos pueden ser de diferentes tipos (incluso vectores onuevas listas).

• Data frames: listas donde los diferentes elementos tienen lamisma longitud.

• Funciones (function): conjunto de codigo de R ejecutable yparametrizable.

Page 36: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otros tipos de conjuntos de datos

• Arrays y matrices (matrix): representacion multidimensionalde los vectores. Todos los elementos de la matriz han de serdel mismo tipo.

• Factores (factor): utiles para el uso de datos categoricos.

• Listas (list): generalizacion de los vectores donde loselementos pueden ser de diferentes tipos (incluso vectores onuevas listas).

• Data frames: listas donde los diferentes elementos tienen lamisma longitud.

• Funciones (function): conjunto de codigo de R ejecutable yparametrizable.

Page 37: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otros tipos de conjuntos de datos

• Arrays y matrices (matrix): representacion multidimensionalde los vectores. Todos los elementos de la matriz han de serdel mismo tipo.

• Factores (factor): utiles para el uso de datos categoricos.

• Listas (list): generalizacion de los vectores donde loselementos pueden ser de diferentes tipos (incluso vectores onuevas listas).

• Data frames: listas donde los diferentes elementos tienen lamisma longitud.

• Funciones (function): conjunto de codigo de R ejecutable yparametrizable.

Page 38: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Array

• Todos los datos del mismo tipo

• Atributo dim> x <- 1:42 ; dim(x) <- c(3,7,2) ; x

, , 1

[,1] [,2] [,3] [,4] [,5] [,6] [,7]

[1,] 1 4 7 10 13 16 19

[2,] 2 5 8 11 14 17 20

[3,] 3 6 9 12 15 18 21

, , 2

[,1] [,2] [,3] [,4] [,5] [,6] [,7]

[1,] 22 25 28 31 34 37 40

[2,] 23 26 29 32 35 38 41

[3,] 24 27 30 33 36 39 42

> x[15]

15

Page 39: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Array y seleccion de datos

> x[c(FALSE,TRUE,FALSE),-c(1,7),2]

[1] 26 29 32 35 38

> x[-2,,1]

[,1] [,2] [,3] [,4] [,5] [,6] [,7]

[1,] 1 4 7 10 13 16 19

[2,] 3 6 9 12 15 18 21

> x <- array(1:5,dim=c(3,7,2))

> x[1:2,2:5,2] <- 99 ; x

, , 1

[,1] [,2] [,3] [,4] [,5] [,6] [,7]

[1,] 1 4 2 5 3 1 4

[2,] 2 5 3 1 4 2 5

[3,] 3 1 4 2 5 3 1

, , 2

[,1] [,2] [,3] [,4] [,5] [,6] [,7]

[1,] 2 99 99 99 99 2 5

[2,] 3 99 99 99 99 3 1

[3,] 4 2 5 3 1 4 2

Page 40: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Matrices (un caso particular)

> a <- matrix(1:20,5,4) ; a

[,1] [,2] [,3] [,4]

[1,] 1 6 11 16

[2,] 2 7 12 17

[3,] 3 8 13 18

[4,] 4 9 14 19

[5,] 5 10 15 20

> ncol(a)

[1] 4

> b <- matrix(21:32, nrow=3, byrow=T)

> rownames(b) <- letters[1:3]; colnames(b) <- LETTERS[1:4]; b

A B C D

a 21 22 23 24

b 25 26 27 28

c 29 30 31 32

> b["a","A"]

[1] 21

> b["a",]

A B C D

21 22 23 24

Page 41: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

rbind y cbind

> a %*% t(b)

a b c

[1,] 790 926 1062

[2,] 880 1032 1184

[3,] 970 1138 1306

[4,] 1060 1244 1428

[5,] 1150 1350 1550

> cbind(rbind(a,b),1:8)

A B C D

1 6 11 16 1

2 7 12 17 2

3 8 13 18 3

4 9 14 19 4

5 10 15 20 5

a 21 22 23 24 6

b 25 26 27 28 7

c 29 30 31 32 8

Page 42: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Algunas funciones

• t, det, diag

• solve(A, B) resuelve A ∗ X = B, solve(A) devuelve A−1

> apply(b, 1, sum)

a b c

90 106 122

> apply(b, 2, mean)

A B C D

25 26 27 28

> rowSums(b)

a b c

90 106 122

> colMeans(b)

A B C D

25 26 27 28

> solve(matrix(c(3,1,2,-1),nrow=2),c(5,0))

[1] 1 1

Page 43: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 44: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Factores

R maneja las variables cualitativas usando factores.

> fr <- factor(c("Sı", "No", "No", "Sı")); fr

[1] Sı No No Sı

Levels: No Sı

> table(fr)

No Sı

2 2

> fr <- factor(c("Sı", "No", "No", "Sı"), levels = c("No", "Sı", "O"),

labels = c("No fumador", "Fumador", "NS/NC")); fr

[1] Fumador No fumador No fumador Fumador

Levels: No fumador Fumador NS/NC

> table(fr)

No fumador Fumador NS/NC

2 2 0

> nlevels(fr)

[1] 3

> levels(fr)

[1] "No fumador" "Fumador" "NS/NC"

Page 45: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Factores ordenados

> fc <- factor(c("Muchos", "Pocos", "Pocos", "Bastantes"),

levels = c("Pocos", "Bastantes", "Muchos"),

ordered = TRUE) ; fc

[1] Muchos Pocos Pocos Bastantes

Levels: Pocos < Bastantes < Muchos

> sum(fc < "Muchos")

[1] 3

> ordered(c("Muchos", "Pocos", "Pocos", "Bastantes"),

levels = c("Pocos", "Bastantes", "Muchos"))

[1] Muchos Pocos Pocos Bastantes

Levels: Pocos < Bastantes < Muchos

> table(fr,fc)

fc

fr Pocos Bastantes Muchos

No fumador 2 0 0

Fumador 0 1 1

NS/NC 0 0 0

Page 46: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Factores

• La funcion tapply permite aplicar una operacion a un vectoragrupando previamente los datos en cada uno de los nivelesproporcionados por un factor.

• Reordenar los niveles de un factor: reorder (el factor cuyosniveles hay que reordenar; un vector de la misma longitud acuyos subconjuntos de valores correspondientes a cada niveldel factor se aplicara la funcion que determina el orden; esafuncion).

• Una variable cuantitativa se puede transformar en una variablecualitativa.

Page 47: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

tapply, reorder

> head(Cebada)

Cosecha Variedad A~no Lugar

1 27.00000 Manchuria 1931 University Farm

2 48.86667 Manchuria 1931 Waseca

3 27.43334 Manchuria 1931 Morris

4 39.93333 Manchuria 1931 Crookston

5 32.96667 Manchuria 1931 Grand Rapids

6 28.96667 Manchuria 1931 Duluth

> head(Cebada$Variedad)

[1] Manchuria Manchuria Manchuria Manchuria Manchuria Manchuria

10 Levels: Glabron Manchuria No.457 No.462 No.475 ... Wisconsin No.38

> tapply(Cebada$Cosecha, Cebada$Variedad, median)

Glabron Manchuria No.457 No.462 ...

32.40000 30.96667 33.96666 30.45000 ...

> Variedad_re <- reorder(Cebada$Variedad, Cebada$Cosecha, median)

> head(Variedad_re)

Manchuria Manchuria Manchuria Manchuria Manchuria Manchuria

10 Levels: Svansota No.462 Manchuria No.475 Velvet ... Trebi

> tapply(Cebada$Cosecha, Variedad_re, median)

Svansota No.462 Manchuria No.475

28.55000 30.45000 30.96667 31.06667

Page 48: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Factores para variables cuantitativas

> num <- c(10, 0, 4, 8, 5, 22)

> interv <- cut(num, breaks = 4); interv

[1] (5.49,11] (-0.022,5.49] (-0.022,5.49]

[4] (5.49,11] (-0.022,5.49] (16.5,22]

Levels: (-0.022,5.49] (5.49,11] (11,16.5] (16.5,22]

> interv <- cut(num, breaks = c(0, 5, 10, 30), right=F); interv

[1] [10,30) [0,5) [0,5) [5,10) [5,10) [10,30)

Levels: [0,5) [5,10) [10,30)

> interv <- cut(num, breaks = c(0, 5, 10, 30), order=T,

labels = c("Poco","Bastante","Mucho"),

include.lowest = TRUE) ; interv

[1] Bastante Poco Poco Bastante Poco Mucho

Levels: Poco < Bastante < Mucho

> table(interv)

Poco Bastante Mucho

3 2 1

> which("Poco" < interv )

[1] 1 4 6

Page 49: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 50: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Listas

> lst <- list(nombre="Carlos", num.hijos=3, edad.hijos=c(4,7,9))

> lst$apellido <- "Garcıa"; lst

$nombre

[1] "Carlos"

$num.hijos

[1] 3

$edad.hijos

[1] 4 7 9

$apellido

[1] "Garcıa"

> length(lst)

[1] 4

> lst[1]

$nombre

[1] "Carlos"

> lst[[3]][2]

[1] 7

> lst$num.hijos

[1] 3

> lst["nombre"]

$nombre

[1] "Carlos"

Page 51: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Marcos de datos

> df <- data.frame(Nombre=c("Pedro","Marıa","Jose","Marta"),

Edad=c(27,34,40,39),

Poblacion=c("Malaga","Madrid","Leon","Barcelona"),

Sexo=c("H","M","H","M"),

Casado=c(F,T,T,F)); df

Nombre Edad Poblacion Sexo Casado

1 Pedro 27 Malaga H FALSE

2 Marıa 34 Madrid M TRUE

3 Jose 40 Leon H TRUE

4 Marta 39 Barcelona M FALSE

> attach(df)

> Nombre

[1] Pedro Marıa Jose Marta

Levels: Jose Marıa Marta Pedro

> Edad

[1] 27 34 40 39

> detach(df)

> Edad

Error: objeto ’Edad’ no encontrado

Page 52: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Marcos de datos

> names(df)

[1] "Nombre" "Edad" "Poblacion" "Sexo" "Casado"

> rownames(df)

[1] "1" "2" "3" "4"

> ncol(df)

[1] 5

> df$Nombre

[1] Pedro Marıa Jose Marta

Levels: Jose Marıa Marta Pedro

> df[1:3]

Nombre Edad Poblacion

1 Pedro 27 Malaga

2 Marıa 34 Madrid

3 Jose 40 Leon

4 Marta 39 Barcelona

> df[1,3]

[1] Malaga

Levels: Barcelona Leon Madrid Malaga

Page 53: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Operaciones simultaneas

• Las funciones lapply y sapply aplica una operacion a cadaelemento de una lista.

• La funcion aggregate permite aplicar una operacion a cadacolumna de un marco de datos agrupando previamente losdatos en cada uno de los niveles proporcionados por una listade factores.

Page 54: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Operaciones simultaneas

> df <- data.frame(altura=c(150,135,210,140), peso=c(65,61,100,65),

sexo=c("H", "M", "H", "M"))

> apply(df[-3], 2, sd)

altura peso

34.73111 18.26426

> lapply(df[-3], sum)

$altura

[1] 635

$peso

[1] 291

> sapply(df[-3], sum)

altura peso

635 291

> aggregate(df[-3], list(df$sexo), mean)

Group.1 altura peso

1 H 180.0 82.5

2 M 137.5 63.0

Page 55: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Marcos de datos: read.table

• Todas las filas tienen el mismo numero de elementos menos laprimera que tiene un elemento menos.

• La primera fila contiene los nombres de las columnas.

• El primer elemento del resto de filas es el nombre de cada fila

• Los datos estan separados por espacios en blanco.

• El separador de los decimales es un punto.

• Los valores desconocidos se expresan con NA.

• write.table

• read.csv,. . . (ver la ayuda)

Page 56: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 57: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Objetivos

Comunicar de ideas complejas con claridad, precision y eficiencia.

• Mostrar los datos.

• Inducir a pensar sobre el contenido en lugar de lametodologıa, el diseno grafico o la tecnologıa que lo produjo

• Evitar la distorsion en la comunicacion de los datos.

• Presentar muchos numeros en un pequeno espacio.

• Hacer que grandes conjuntos de datos tengan coherencia.

• Inducir a la comparacion entre diferentes partes de los datos.

• Revelar detalles, desde un perspectiva global o particular.

• Tener un proposito razonablemente claro: la descripcion, laexploracion, la tabulacion o la decoracion.

• Estar integrado con las descripciones estadısticas y verbales,

Page 58: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Recomendaciones

• Hacer que los datos sobresalgan. Evitar lo superfluo.

• Utilizar elementos prominentes para mostrar los datos.

• Hacer la region de datos menor que la region delimitada porlas escalas. Las marcas hacia afuera.

• No congestionar la region de datos.

• No exagerar el numero de marcas (de 3 a 10 marcas).

• Utilizar una lınea cuando haya un valor que deba verse atraves del grafico, pero que no interfiera con los datos.

• Las etiquetas no deben interferir o congestionar el grafico.

• Evitar colocar claves en el interior. Colocar las notas en eltexto o la explicacion.

• Los sımbolos o conjuntos de datos que se superpongan debenpoder ser reconocidos facilmente.

Page 59: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Dispositivos graficos

R puede generar graficos en casi cualquier tipo de dispositivografico o de impresion.

• la ventana de RStudio (por defecto);

• postscript, pdf y bmp, para generar ficheros PostScript, PDFy Mapa de Puntos (BMP)

• png y jpeg, para generar imagenes PNG y JPEG.

hist(rnorm(1000))

png(file="histograma.png")

hist(rnorm(1000))

dev.off()

X11()

hist(rnorm(1000))

savePlot(file="histograma.png", type="png")

dev.off()

Page 60: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Biblioteca lattice

> g1 <- densityplot(~ gcsescore | factor(score), data = Chem97,

plot.points = FALSE, ref = TRUE)

> g2 <- densityplot(~ gcsescore, data = Chem97, groups = score,

plot.points = FALSE, ref = TRUE,

auto.key = list(columns = 3))

> print(g1, split=c(1,1,2,1),more=T)

> print(g2, split=c(2,1,2,1))

Page 61: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Parametros comunes

En la mayorıa de las funciones graficas

• data: Marco de datos con las variables a partir de las cualesse construye el grafico

• horizontal: Determina el sentido del grafico

• main: Tıtulo principal

• sub: Subtıtulo

• xlab, ylab: Etiquetas de los ejes X e Y

• xlim, ylim: Lımites de los ejes X e Y

Page 62: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 63: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Diagrama de dispersion

Muestra los valores dibujando un punto por cada dato.

> head(faithful$eruptions)

[1] 3.600 1.800 3.333 2.283 4.533 2.883

> stripplot(~faithful$eruptions, xlab = "Duracion (en minutos)",

main = "Erupciones del geiser Old Faithful")

> plot(~faithful$eruptions, pch = 1 , xlab = "Duracion (en minutos)",

main = "Erupciones del geiser Old Faithful")

Page 64: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Diagrama de caja y bigote

Un rectangulo entre el primer y el tercer cuartil, en su interior lamediana. A ambos lados dos lıneas con los valores que seencuentran a lo sumo a una distancia de 1.5 veces el rangointercuartılico. Cualquier otro valor se marca individualmente.

> bwplot(~Sepal.Width, data = iris, main = "Ancho de los Sepalos",

xlab = "")

> boxplot(iris$Sepal.Width, main = "Ancho de los Sepalos", xlab = "",

horizontal=T)

Page 65: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Varios diagramas de caja y bigote

Para comparar las distribuciones para distintas agrupaciones en losdatos podemos realizar un diagrama por cada uno.

> bwplot(Species~Sepal.Width, data = iris,

main = "Ancho de los Sepalos", xlab = "")

> boxplot(iris$Sepal.Width ~ iris$Species, xlab = "",

main = "Ancho de los Sepalos", horizontal = T)

Page 66: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Histograma

Se divide el rango de datos en clases, se calcula la frecuencia dedatos para cada clase y se dibuja una barra por clase (ancho laamplitud de la clase y superficie proporcional a la frecuencia)

> histogram(~eruptions, data = faithful, type = "count",

main = "Erupciones del geiser Old Faithful",

xlab = "Duracion (en minutos)", ylab = "No de erupciones")

> hist(faithful$eruptions, xlab = "Duracion (en minutos)",

main = "Erupciones del geiser Old Faithful",

ylab = "No de erupciones", ylim = c(0, 80), xlim = c(1, 6))

Page 67: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Histograma (Cont.)

Fijar el numero de clases (por defecto usa la regla de Sturges,log2(n) + 1), sus extremos y/o utilizar las frecuencias relativas.

> print(histogram(faithful$eruptions, type = "percent", nint = 20),

split = c(1,1,2,1), more=T)

> print(histogram(faithful$eruptions, type = "density",

breaks = c(0, 2, 3, 3.5, 4, 4.5, 5, 5.5)),

split = c(2,1,2,1))

Page 68: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Histograma (Cont.)Fijar el numero de clases (por defecto usa la regla de Sturges,log2(n) + 1), sus extremos y/o utilizar las frecuencias relativas.> par(mfcol = c(1, 2))

> h = hist(faithful$eruptions, plot=FALSE, breaks = 25)

> h$density = h$counts/sum(h$counts)*100

> plot(h, freq=FALSE, ylab = "Porcentaje", main="", ylim=c(0,10),

xlab = "Duracion (en minutos)")

> hist(faithful$eruptions, breaks = c(0, 2, 3, 3.5, 4, 4.5, 5, 5.5),

ylab="Densidad", xlab="Duracion (en minutos)", main="",

ylim=c(0, 0.55))

Page 69: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Grafico de densidad

> Erupciones <- faithful$eruptions

> densityplot(Erupciones, plot.points = "jitter",

main = "Erupciones del geiser Old Faithful",

xlab = "Duracion (en minutos)", ylab = "Probabilidad")

> d <- density(Erupciones)

> plot(d, main="Erupciones del geiser Old Faithful",

xlab = "Duracion (en minutos)", ylab = "Probabilidad")

> points(jitter(Erupciones), jitter(rep(0,length(Erupciones)),0.25))

Opciones de plot.points: valor logico, ”rug” o ”jitter”

Page 70: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Superposicion

> densityplot(~height, data = singer, groups = voice.part,

bw = 1.5, auto.key = list(columns = 4))

Page 71: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Diagrama de barras

Una barra por cada dato, la longitud de cada barra es proporcionalal valor del dato. Para conjuntos de datos pequenos.

> drosophila <- read.table("drosophila.txt")

> barchart(sort(tapply(drosophila$fecundidad, drosophila$linea, mean)),

xlab="", main="Fecundidad media de cada lınea genica")

> par(mar = c(5,6,4,2)+0.1)

> barplot(sort(tapply(drosophila$fecundidad, drosophila$linea, mean),

decreasing=T),

xlab="", main="Fecundidad media de cada lınea genica",

horiz=T, xlim=c(0, 35), las=1)

Page 72: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Diag. de barras (variables cualitativas)

Frecuencias absolutas de los distintas categorıas de esa variable.

> barchart(table(iris$Species), horizontal=FALSE,

main = "Numero de plantas estudiadas segun la especie",

xlab = "Especie de lirio")

> barplot(table(iris$Species), xlab = "Especie de lirio",

main = "Numero de plantas estudiadas segun la especie")

Page 73: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Superposicion

Por cada grupo de valores, un grupo de barras

> barchart(Departamento ~ Solicitudes, groups = Resultado,

data = UCBAdmisiones, auto.key=T)

Page 74: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Diagrama de puntos

Un punto por cada dato en una coordenada vertical distinta.

> dotplot(sort(islands[islands < islands["Java"]]),

xlab="Superficie en millas cuadradas")

> dotchart(sort(islands[islands < islands["Java"]]),

xlab="Superficie en millas cuadradas")

Page 75: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 76: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Diagrama de dispersion bivariante

Dibuja un punto por cada par de valores.ejeY ~ ejeX

> A~no <- 1700:1988

> xyplot(sunspot.year ~ A~no)

> xyplot(sunspot.year ~ A~no, type = "b")

> xyplot(sunspot.year ~ A~no, type = "s")

Page 77: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Matriz de diagramas de dispersion> splom(environmental)

Page 78: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Tecnicas de visualizacion (I)

Anadir una ligera perturbacion a los datos: jitter

> xyplot(Sepal.Length ~ Petal.Length, data = iris)

> xyplot(jitter(Sepal.Length) ~ jitter(Petal.Length), data = iris)

Page 79: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Tecnicas de visualizacion (II)

Razon de aspecto: Relacion entre la altura y la anchura

> f <- function (x) {if (x < 0) x^2 else 10*x}

> ex <- -10:10 ; ey <- sapply(ex, f)

> xyplot(ey ~ ex, type = "l", aspect = 1, xlab = "x", ylab = "f(x)")

> xyplot(ey ~ ex, type = "l", aspect = 1/10, xlab = "x", ylab = "f(x)")

> xyplot(ey ~ ex, type = "l", aspect = 10, xlab = "x", ylab = "f(x)")

Page 80: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Regresion lineal simple

Anadir la recta de regresion

> lm(ozone ~ wind, data = environmental)

Coefficients:

(Intercept) wind

99.054 -5.731

> xyplot(ozone ~ wind, data = environmental, type = c("p", "r"),

aspect = "xy")

Page 81: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Ajuste de una curva

Ajuste de loess:

• alfa (span): si aumenta la curva se hace mas suave

• lambda (degree): grado de ciertos polinomios (1 o 2)

> xyplot(ozone ~ wind, data = environmental, type = c("p", "smooth"),

aspect = "xy", span = 0.6, degree = 2)

Page 82: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Distribucion en paneles (trellis)

En cada panel se dibuja el grafico correspondiente a unsubconjunto de datos que se obtienen a partir de variablescondicionantes:

• ~ x | g1 * g2 * ...: histograma, grafico de densidad,matriz de dispersion

• y ~ x | g1 * g2 * ...: diagramas de caja y bigote,barras, puntos y dispersion

Page 83: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

> dotplot(variety ~ yield | year * site, data = barley,

xlab="", layout = c(6,2))

Page 84: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Condicionante cuantitativa

> E.shingle <- equal.count(ethanol$E, number = 9, overlap = 1/4)

> xyplot(NOx ~ C | E.shingle, data = ethanol, aspect = "xy",

xlab = "Razon de compresion",

ylab = "Oxidos de nitrogeno (microgramos/J)")

Page 85: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Superposicion de paneles

> xyplot(Sepal.Length+Sepal.Width ~ Petal.Length+Petal.Width | Species,

data = iris, auto.key = list(column = 2),

xlab = "Longitud y anchura del petalo",

ylab = "Longitud y anchura del sepalo")

Page 86: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 87: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Formato del punto y datos extra

> xyplot(1:10 ~ 1:10)

> xyplot(1:10 ~ 1:10, pch=3, col="red")

> xyplot(1:10 ~ 1:10,

panel = function (x, y) {

panel.xyplot(x, y, pch=3, col="red")

panel.points(c(2,2), c(4,5), pch=5, col="blue")})

Page 88: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Formato del punto y datos extra

> xyplot(1:10 ~ 1:10)

> xyplot(1:10 ~ 1:10, pch=3, col="red")

> xyplot(1:10 ~ 1:10,

panel = function (x, y) {

panel.xyplot(x, y, pch=3, col="red")

panel.points(c(2,2), c(4,5), pch=5, col="blue")})

Page 89: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Formato del punto y datos extra

> xyplot(1:10 ~ 1:10)

> xyplot(1:10 ~ 1:10, pch=3, col="red")

> xyplot(1:10 ~ 1:10,

panel = function (x, y) {

panel.xyplot(x, y, pch=3, col="red")

panel.points(c(2,2), c(4,5), pch=5, col="blue")})

Page 90: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Leyenda

> attach(iris)

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species, auto.key = TRUE)

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species,

auto.key = list(corner=c(1,0.95), lines=T, points=F,

text=c("Setosa","Versicolor","Virginica")))

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species, pch=4:6, col=2:4,

key = list(corner=c(1,0.95), lines=list(col=2:4, lty=1:3),

text=list(c("Setosa","Versicolor","Virginica"), font=3)))

Page 91: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Leyenda

> attach(iris)

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species, auto.key = TRUE)

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species,

auto.key = list(corner=c(1,0.95), lines=T, points=F,

text=c("Setosa","Versicolor","Virginica")))

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species, pch=4:6, col=2:4,

key = list(corner=c(1,0.95), lines=list(col=2:4, lty=1:3),

text=list(c("Setosa","Versicolor","Virginica"), font=3)))

Page 92: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Leyenda

> attach(iris)

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species, auto.key = TRUE)

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species,

auto.key = list(corner=c(1,0.95), lines=T, points=F,

text=c("Setosa","Versicolor","Virginica")))

> xyplot(Sepal.Width ~ Sepal.Length, groups = Species, pch=4:6, col=2:4,

key = list(corner=c(1,0.95), lines=list(col=2:4, lty=1:3),

text=list(c("Setosa","Versicolor","Virginica"), font=3)))

Page 93: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Superponer distintos graficos

> a <- rnorm(1000)

> histogram(~ a, type = "density",

panel = function(x, ...) {

panel.histogram(x, ..., col="blue", border="white")

panel.densityplot(x,..., col = "orange", lwd=3)})

> histogram(~ a, type = "density",

panel = function(x, ...) {

panel.histogram(x, breaks=25, col="blue", border="white")

panel.densityplot(x,..., col = "orange", lwd = 3)})

Page 94: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Escala logarıtmica y curva suavizada

> xyplot(dist ~ speed, data = cars, type=c("p","smooth"), span=1,

main = "Conjunto de datos: cars",

xlab = "Velocidad (mph)", ylab = "Distancia de franado (ft)")

> xyplot(log10(dist) ~ log10(speed), data = cars,

type=c("p","smooth"), span=1,

main = "Conjunto de datos: cars (escala logartıtmica)",

xlab = "Velocidad (mph)", ylab = "Distancia de franado (ft)")

Page 95: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Escala logarıtmica y curva suavizada

> xyplot(dist ~ speed, data = cars, type=c("p","smooth"), span=1,

main = "Conjunto de datos: cars",

xlab = "Velocidad (mph)", ylab = "Distancia de franado (ft)")

> xyplot(log10(dist) ~ log10(speed), data = cars,

type=c("p","smooth"), span=1,

main = "Conjunto de datos: cars (escala logartıtmica)",

xlab = "Velocidad (mph)", ylab = "Distancia de franado (ft)")

Page 96: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Escala logarıtmica y curva suavizada

> xyplot(dist ~ speed, data = cars,

main = "Conjunto de datos: cars (escala logarıtmica)",

xlab = "Velocidad (mph)", ylab = "Distancia de franado (ft)",

scales = list(x=list(equispaced.log = FALSE,log=TRUE),

y=list(equispaced.log = FALSE,log=TRUE),

col="green"),

panel = function(x, y) {panel.xyplot(x, y)

panel.loess(x, y, span=1, col="red")})

Page 97: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otras opciones (I)

Para cualquiera de los tıtulos

> xyplot(ozone^0.5 ~ wind, data = environmental,

ylab = expression(sqrt("Concentracion de ozono")),

xlab = list(label = "Velocidad del viento",

cex = 2, col = "red", font = 3))

Page 98: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otras opciones (II)

Elegir parte de un factor

> bwplot(Species ~ Sepal.Length, data = iris,

subset = Species != "setosa")

Page 99: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otras opciones (III)

Recorrido y seleccion de paneles

> histogram(~ height | voice.part, data = singer, layout = c(3, 3))

> histogram(~ height | voice.part, data = singer, layout = c(3, 3),

as.table=T, skip = c(rep(FALSE, 4), TRUE, rep(FALSE, 4)))

Page 100: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Otros elementos...

> rojos <- runif(10,1,10) ; verdes <- runif(10,1,10)

> lineas <- runif(10, 1, 10) ; textos <- runif(10,1,10)

> poligono <- runif(8,1,10)

> xyplot(1:10 ~ 1:10, xlab = "", ylab = "", col="black",

scales = list(x = list(labels=c("uno", "tres", "cinco",

"siete", "nueve"),

at = seq(1,10,by=2)),

y = list(labels=1:10, at=1:10)),

main = "Grafico inventado",

key = list(text = list(c("uno", "dos", "tres")),

x=0.8, y=0.3, lines=list(col=rainbow(3), lty=1:3)),

panel = function (x, y, ...) {

panel.xyplot(x, y, ...)

panel.points(rojos[1:5], rojos[6:10], cex=1.5, col="red")

panel.points(verdes[1:5], verdes[6:10], cex=1.7, col="green",

pch="+")

panel.lines(1:10, lineas, lty=2, lwd=2, col="black")

panel.text(textos[1:5], textos[6:10], cex=1.7, col=rainbow(5),

labels = c("uno", "dos", "tres", "cuatro", "cinco"))

panel.abline(h=5, lty=4)

panel.polygon(poligono[1:4], poligono[5:8], col="blue")})

Page 101: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~
Page 102: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

1 Introduccion

2 R Markdown

3 Vectores

4 Factores

5 Listas y marcos de datos

6 Graficos en RGraficos univariantesGraficos multivariantesAnadir otros elementos

7 Programacion en R

Page 103: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Agrupacion de expresiones

• Las expresiones pueden ser agrupadas entre llaves:

• En una misma lınea han de separarse por ;

{

a <- 0; b <- 1

c <- a+b

}

• El valor que devuelve el grupo es el valor de la ultimaexpresion

Page 104: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Condicional: ifif (condicion) consecuencia [else alternativa]

• condicion tiene que devolver un unico valor logico• Si consecuencia y/o alternativa son un grupo de expresiones

han de ir entre llaves• Si condicion devuelve el valor TRUE se obtiene el valor de

consecuencia• en caso contrario, se obtiene el valor de alternativa

> c <- 0:10 < 9 & 3 < 0:10

> c

[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE

> a <- 10:20

> b <- 40:50

> if (TRUE) a + b else a * b

[1] 50 52 54 56 58 60 62 64 66 68 70

> if (c) a + b else a * b

[1] 400 451 504 559 616 675 736 799 864 931 1000

Warning message:

In if (c) a + b else a * b :

la condicion tiene longitud > 1 y solo el primer elemento sera usado

>

Page 105: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Condicional: ifelse

ifelse(condicion,a,b)

• Devuelve un vector de la misma longitud que condicion, conlos elementos a[i] si condicion[i] tiene el valor TRUE, y b[i] encaso contrario.

> c <- 0:10 < 9 & 3 < 0:10

> c

[1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE FALSE FALSE

> a <- 10:20

> b <- 40:50

> ifelse(c, a, b)

[1] 40 41 42 43 14 15 16 17 18 49 50

Page 106: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

for, while, repeat

for (var in vector) expr

• expr se calcula tantas veces como elementos tenga vector

• la variable var toma como valor, en cada ocasion, cada unode los elementos de vector

while (condicion) expr

• se calcula expr mientras condicion tenga el valor TRUE

repeat expr

• se calcula expr mientras no se interrumpa explıcitamente conla instruccion break.

Page 107: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Ejemplos> a <- 1:5000; b <- 11:5010

> system.time(res <- a+b)

user system elapsed

0 0 0

> system.time({resFor <- c() ;

for (i in 1:5000) resFor[i] <- a[i]+b[i]})

user system elapsed

0.026 0.000 0.025

> system.time({resWhile <- c() ; i<-1 ;

while (i <= 5000) {resWhile[i] <- a[i]+b[i] ; i<- i+1}})

user system elapsed

0.028 0.000 0.027

> system.time({resRepeat <- c() ; i<-1 ;

repeat {if (i<=5000) {resRepeat[i] <- a[i]+b[i] ; i<- i+1}

else break}})

user system elapsed

0.028 0.000 0.028

> identical(res,resFor)

[1] TRUE

> identical(resFor,resWhile)

[1] TRUE

> identical(resWhile,resRepeat)

[1] TRUE

Page 108: Introducción a R · Contenidos 1 Introducci on 2 R Markdown 3 Vectores 4 Factores 5 Listas y marcos de datos 6 Gr a cos en R Gr a cos univariantes Gr a cos multivariantes Anadir~

Definicion de funciones

nombre <- function(var1,...,varn) expr

• expr es una agrupacion de expresiones que utilizan var1,. . . varn

nombre(arg1,..., argn)

• valor de expr tras sustituir cada vari por el valor de argi

> ecGrado2 <- function(a, b, c)

{ disc <- (b^2)-(4*a*c)

sol1 <- (-b + sqrt(disc))/(2*a)

sol2 <- (-b - sqrt(disc))/(2*a)

c(sol1,sol2)

}

> ecGrado2(2,4,1)

[1] -0.2928932 -1.7071068

> "%porcentaje%" <- function(a,b) (a/(a+b))*100

> 4 %porcentaje% 6

[1] 40

>