ANÁLISIS DE DATOS Ricardo Aler Mur -...
Transcript of ANÁLISIS DE DATOS Ricardo Aler Mur -...
![Page 1: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/1.jpg)
ANÁLISIS DE DATOS
Ricardo Aler Mur
![Page 2: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/2.jpg)
E L E M E N T O S B Á S I C O S
R
![Page 3: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/3.jpg)
HISTORIA DE R
![Page 4: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/4.jpg)
HISTORIA DE R
• R es un dialecto del lenguaje S
• S fue desarrollado por John Chambers en los
laboratorios Bell en 1976. El objetivo era facilitar el
análisis estadístico. Inicialmente usaba librerías en
Fortran, después fueron reescritas a C.
• Característica de S: análisis de datos interactivo y
también posibilidad de escribir scripts (programas)
• En la actualidad es propiedad de TIBCO (25
millones de dolares)
![Page 5: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/5.jpg)
HISTORIA DE R
• R se crea en 1991en Nueva Zelanda por Ihaka y
Gentleman, con el objetivo de tener similares
posibilidades a S. Sintaxis similar aunque los detalles
internos son distintos
• En el 2000 se crea R 1.0.0 con licencia GNU GPL
(software libre)
• La versión 3.0.2 salió en Diciembre 2013. Desarrollo
muy activo
• Ejecuta en cualquier plataforma (al parecer incluso
en Playstation 3)
![Page 6: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/6.jpg)
HISTORIA DE R
• Ventajas de R:
• Es libre
• Es bastante ligero (comparar el arranque de R
con el arranque de Matlab)
• Orientado al proceso y análisis de datos (gracias
a la estructura data.frame). El acceso a matrices
y data.frames es parecido al de Matlab (ej:
m[1:10,1:2] accede a las diez primeras líneas de
la matriz y a las dos primeras columnas)
• Gráficos potentes
• El más utilizado en análisis de datos (según
encuestas)
• Comunidad muy activa. 4000 paquetes
desarrollados y disponibles en CRAN:
http://cran.r-project.org/
• Mucha documentación y libros sobre el lenguaje
![Page 7: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/7.jpg)
![Page 8: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/8.jpg)
HISTORIA DE R
• Desventajas de R:
• Ya tiene 40 años
• El procesamiento es con datos en memoria (no tan bueno
para conjuntos de datos masivos, aunque dispone de
alternativas: comunicación con mySQL, paquetes para que
los datos residan parcialmente en disco, H2O, …)
• Poco soporte para gráficos en 3D, gráficos dinámicos y
gráficos interactivos, aunque en el último año han
aparecido maneras de generar gráficos interactivos en
javascript desde R, con Shiny, rCharts, …
• http://shiny.rstudio.com/gallery/
• Ej: http://shiny.rstudio.com/gallery/nvd3-line-chart-output.html
![Page 9: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/9.jpg)
![Page 10: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/10.jpg)
![Page 11: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/11.jpg)
RSTUDIO
![Page 12: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/12.jpg)
OBJETOS EN R
![Page 13: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/13.jpg)
OBJETOS EN R
• Escalares: son realmente vectores de un elemento
• Vectores: todos los elementos del mismo tipo
• Factores
• Matrices: todos los elementos del mismo tipo
• Listas: permite combinar elementos de tipos
distintos
• Data frames: son matrices con elementos de
distintos tipos
• Nota: para este tutorial se ha seguido
• http://www.dcc.fc.up.pt/~ltorgo/DataMiningWithR/code.html
![Page 14: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/14.jpg)
VARIABLES
• Asignaciones a variables:
• x <- 945 es lo mismo que x = 945
• Ojo! R es case-sensitive
![Page 15: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/15.jpg)
LISTAR Y BORRAR VARIABLES
• ls(): listar objetos, rm(): borrar objetos
• rm(list=ls()): borrar todos los objetos
![Page 16: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/16.jpg)
TIPOS DE DATOS ESCALARES (“ATOMIC”)
• Character:
x = "cadena de caracteres"
x = ‘cadena de caracteres’
> paste("variable=",3,"\n")
[1] "variable= 3 \n"
> cat(paste("variable=",3,"\n"))
variable= 3
• Logical:
• x = TRUE, x = T
• x = FALSE, x = F
• Numeric:
• x = 3
• x = NA
• is.na(x) == TRUE
• (valor por omisión,
missing value) • x = 1/0 == Inf
• X=Inf/Inf == NaN
• is.nan(x) == TRUE
• Complex:
• x = 3 + 4i
• is.complex(x) == TRUE
![Page 17: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/17.jpg)
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Data frames
• Listas
![Page 18: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/18.jpg)
VECTORES
• Todos los elementos deben ser del mismo tipo:
NA es “sin valor” o valor faltante
(missing value, not acknowledged)
![Page 19: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/19.jpg)
VECTORES
• Vector vacío:
• Redimensionamiento dinámico de vectores:
![Page 20: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/20.jpg)
VECTORES
• Concatenación de vectores:
> x = c(1,2,3)
> y = c(4,5)
> c(x,y)
[1] 1 2 3 4 5
![Page 21: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/21.jpg)
VECTORIZACIÓN
• Normalmente, una función aplicada a un vector,
es aplicada a cada uno de los elementos
![Page 22: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/22.jpg)
VECTORIZATION
• Nuestras propias funciones también están
vectorizadas
> mif = function(x) {x^2}
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> mif(x)
[,1] [,2] [,3]
[1,] 1 4 9
[2,] 16 25 36
![Page 23: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/23.jpg)
REGLA DEL RECICLADO
• Si por ejemplo se suman dos vectores de distinto tamaño, el mas
pequeño se replica hasta que tiene el mismo tamaño que el grande
(esto es cierto incluso con valores individuales)
![Page 24: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/24.jpg)
ARITMÉTICA DE VECTORES
• +,-,*,/,^: Se aplican componente a componente. Si
los dos vectores tienen tamaños distintos, se aplica
la regla del reciclado:
• Producto escalar: x %*% y
• (x1,x2,x3) . (y1,y2,y3) == x1*y1+x2*y2+x3*y3
• %/%: división entera, %%: módulo (resto)
> x = c(1,2,3,4)
> x+1
[1] 2 3 4 5
> x^c(1,2)
[1] 1 4 3 16
> x+c(10,11,12,13)
[1] 11 13 15 17
![Page 25: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/25.jpg)
EJEMPLO: CÁLCULO DE LA DISTANCIA EUCLIDEA
![Page 26: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/26.jpg)
EJEMPLO: CÁLCULO DE LA DISTANCIA EUCLIDEA
> x = c(1,2,3,4)
> y = c(6,7,8,9)
> x-y
[1] -5 -5 -5 -5
> (x-y)*(x-y)
[1] 25 25 25 25
> x = c(1.1,1.5,3.7)
> y = c(7.9,8.0,1.3)
> x-y
[1] -6.8 -6.5 2.4
> (x-y)*(x-y)
[1] 46.24 42.25 5.76
> sum((x-y)*(x-y))
[1] 94.25
> sqrt(sum((x-y)*(x-y)))
[1] 9.708244
> deuclidea1 = function(x,y)
{return(sqrt(sum((x-y)*(x-y))))}
> deuclidea1(x,y)
[1] 9.708244
> deuclidea2 = function(x,y)
{return(sqrt((x-y) %*% (x-y)))}
> deuclidea2(x,y)
[,1]
[1,] 9.708244
![Page 27: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/27.jpg)
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Data frames
• Listas
![Page 28: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/28.jpg)
FACTORES
• Se utilizan en análisis de datos como una
representación eficiente de valores discretos
(categóricos)
![Page 29: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/29.jpg)
FACTORES
![Page 30: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/30.jpg)
GENERAR VECTORES MEDIANTE SECUENCIAS
• Crear un vector con enteros de 1 a 1000
• Cuidado con la precedencia de los operadores:
![Page 31: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/31.jpg)
GENERAR VECTORES MEDIANTE SECUENCIAS
• Secuencias invertidas y secuencias de números
reales:
![Page 32: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/32.jpg)
GENERAR VECTORES MEDIANTE REPETICIONES
![Page 33: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/33.jpg)
SECUENCIAS ALEATORIAS
• 10 valores de una gaussiana(0,1)
• Gaussiana con media 10 y desviación 3
• 5 valores de t-student con 10 grados de libertad
![Page 34: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/34.jpg)
ACCESO A VECTORES (SUB-SETTING)
• Acceso simple: x[3]
• Acceso mediante índices. Tres tipos:
• Índices lógicos (booleanos)
• Índices por valor
• Índices por nombres
![Page 35: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/35.jpg)
ACCESO A VECTORES MEDIANTE ÍNDICES LÓGICOS
==, !=, >, <, >=, <=, &, |, !, is.na(), is.nan()
![Page 36: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/36.jpg)
ACCESO A VECTORES MEDIANTE ÍNDICES BOOLEANOS
• Convertir todos los
valores NA a cero:
• Cambiar el signo a
los valores
negativos (igual
que x = abs(x) ): > x = c(1,2,NA,3,NA,4)
> x
[1] 1 2 NA 3 NA 4
> x[is.na(x)] = 0
> x
[1] 1 2 0 3 0 4
> x = c(-1, 2, -3, 4)
> x[x<0] = -x[x<0]
> x
[1] 1 2 3 4
![Page 37: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/37.jpg)
ACCESO A VECTORES MEDIANTE ÍNDICES DE VALORES
Se puede usar el “-” para
excluir valores:
![Page 38: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/38.jpg)
ACCESO A VECTORES POR NOMBRE
• Las posiciones de un vector pueden tener nombre
• Acceso por nombre:
![Page 39: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/39.jpg)
ACCESO AL VECTOR COMPLETO
• Por ejemplo, para borrar todos los elementos de un
vector x:
• x[] = 0 es lo mismo que x[1:length(x)] = 0 (se aplica la “regla
de reciclado”). Asigna 0 a todas las posiciones del vector
• pero es distinto de x = 0, el cual convierte x en un único
valor
> x
[1] 1 2 3 4
> x[]=0
> x
[1] 0 0 0 0
> x = 0
> x
[1] 0
![Page 40: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/40.jpg)
ESTRUCTURAS DE CONTROL
• ESTRUCTURAS DE CONTROL:
• for
• while
• repeat
![Page 41: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/41.jpg)
ESTRUCTURAS DE CONTROL
El bucle for recorre vectores (de
cualquier tipo):
> for (i in c(1,2,3)) { print(i)}
[1] 1
[1] 2
[1] 3
> for (i in c("uno","dos","tres"))
{print(i)}
[1] "uno"
[1] "dos"
[1] "tres"
> i=1
> while(i<4){print(i); i=i+1}
[1] 1
[1] 2
[1] 3
> i=1
> while(TRUE){print(i); i=i+1;
if(i>=4) break}
[1] 1
[1] 2
[1] 3
![Page 42: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/42.jpg)
HACIENDO LAS COSAS A LA MANERA DE R
• Contar cuantos valores son impares en un vector x
PEOR
MEJOR
sum(x %% 2) sum(x %% 2 == 1) CON VECTORIZACIÓN: o
![Page 43: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/43.jpg)
ESTRUCTURAS DE CONTROL
IF:
> if(i>3) {print(i)}
> if(i>2) {print(i)} else {print(2*i)}
IF es una función!
> x = if(i>3) i else 2*i
> x
[1] 4
![Page 44: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/44.jpg)
ESTRUCTURAS DE CONTROL: FUNCIONES
> f = function(x, y=FALSE) {if(y) x else x*x}
> f
function(x, y=FALSE) {if(y) x else x*x}
> f(2)
[1] 4
> f(2,TRUE)
[1] 2
> f(2,y=TRUE)
[1] 2
• Las funciones son objetos
• Pueden llevar parámetros con nombre con valor por omisión
• Una función devuelve lo último que se ejecuta (se puede utilizar
return, pero no es necesario)
![Page 45: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/45.jpg)
FICHEROS CON PROGRAMAS (SCRIPTS)
• Archivo / Nuevo script
• Archivo / Abrir script
• CTRL-R: ejecutar una línea del script
• Es necesario usar source(“miscript.R”) cada vez que
modifiquemos el script
• (esto se hará automáticamente cuando usemos Rstudio)
![Page 46: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/46.jpg)
ALGUNOS EJERCICIOS
![Page 47: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/47.jpg)
EXPERIMENTO VECTORIZACIÓN
• Como medir el tiempo: t0 = proc.time()
• Ejercicio: hacer un script que genere dos vectores:
• x=seq(1,10^6)
• y=x*5.2
• Y los multiplique componente a componente de dos
maneras:
• Con un bucle
• x*y
• Medir tiempos y comparar
![Page 48: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/48.jpg)
HACIENDO LAS COSAS AL MODO R
• Sea un vector x = seq(1,10^5)
• Queremos calcular otro vector y de tal manera que
• y[i] = x[i]-x[i+1] para todo i de 1 a length(x)-1
• Hacedlo de dos maneras distintas (con bucle y
vectorizado) y pensad si se os ocurre alguna
variante mas. Medid tiempos.
• Regla: evitar usar bucles en la medida de lo posible
![Page 49: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/49.jpg)
EJERCICIOS
• Crear un vector de 10 elementos así:
• x=sample(1:100, 10)
• Ejercicios:
• Poner a cero los valores pares.
• Poner a cero las posiciones pares. Hacedlo de tres maneras
distintas
• Escribir una función avg_gt con dos argumentos: x y gt (x es
un vector y gt es un real). La función computa la media de
los valores de x mas grandes que gt.
![Page 50: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/50.jpg)
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Data frames
• Listas
![Page 51: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/51.jpg)
MATRICES
• Son como los vectores, pero en DOS dimensiones
• Se pueden crear a partir de un vector y cambiando la dimensión. Notar que los valores se extienden por columnas:
• De manera equivalente:
![Page 52: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/52.jpg)
MATRICES
• Por filas:
![Page 53: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/53.jpg)
CONSTRUYENDO MATRICES
POR FILAS:
> rbind(c(1,2,3),c(4,5,6))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
POR COLUMNAS:
> cbind(c(1,2,3),c(4,5,6))
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
![Page 54: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/54.jpg)
CONSTRUYENDO MATRICES
> x
[,1] [,2]
[1,] 1 2
[2,] 3 4
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 10 11 12 13 14
[2,] 15 16 17 18 19
> cbind(x,y)
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 10 11 12 13 14
[2,] 3 4 15 16 17 18 19
![Page 55: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/55.jpg)
ACCESOS A MATRICES: POR VALORES
![Page 56: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/56.jpg)
ACCESOS A MATRICES
• Manteniendo el formato columna:
![Page 57: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/57.jpg)
ACCESOS A MATRICES: MEDIANTE UNA LISTA DE POSICIONES
• Mediante una lista de posiciones
> x = rbind(c(1,2,3),c(4,5,6))
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> i = rbind(c(1,1),c(2,2),c(2,3))
> i
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 2 3
> x[i]
[1] 1 5 6
![Page 58: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/58.jpg)
ACCESOS A MATRICES: MEDIANTE ÍNDICES BOOLEANOS
> x = rbind(c(1,2,3),c(4,5,6))
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> x>2
[,1] [,2] [,3]
[1,] FALSE FALSE TRUE
[2,] TRUE TRUE TRUE
> x[x>2]
[1] 4 5 3 6
![Page 59: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/59.jpg)
DANDO NOMBRES A FILAS Y COLUMNAS Y ACCESO POR NOMBRE
![Page 60: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/60.jpg)
ARITMÉTICA DE MATRICES
• %*%: producto matricial entre dos matrices
• +,-,*,/,^: Se aplican componente a
componente.
• Regla del reciclado:
• Si x e y son matrices, tienen que tener el
mismo número de componentes
• Si x es matriz e y es escalar, entonces se
aplica la regla del reciclado
• Si x es matriz e y es vector, se considera
que ambos son columnas y se aplica
reciclado
• t(): transpone la matriz. Si se aplica a un
vector se considera que este es columna
• Se puede utilizar log(), sqrt(), …, sobre
matrices
> x [,1] [,2] [,3]
[1,] 1 2 3 [2,] 4 5 6 > x+1 [,1] [,2] [,3] [1,] 2 3 4 [2,] 5 6 7 > x^2
[,1] [,2] [,3] [1,] 1 4 9 [2,] 16 25 36
> t(c(1,2,3)) [,1] [,2] [,3] [1,] 1 2 3 > t(t(c(1,2,3))) [,1] [1,] 1 [2,] 2
[3,] 3
![Page 61: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/61.jpg)
EJERCICIO MATRICES
1. Crear una matriz de 10x10 y poner a cero aquellas
coordenadas (i,j) donde i es par y j es impar
2. Crear una matriz de 10x10 y poner a cero el
rectángulo 3 a 5 (en la coordenada x) y de 5 a 8
(en la coordenada y)
![Page 62: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/62.jpg)
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Arrays
• Data frames
• Listas
![Page 63: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/63.jpg)
ARRAYS
• Son matrices en mas de dos dimensiones
![Page 64: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/64.jpg)
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Listas
• Data frames
![Page 65: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/65.jpg)
LISTAS
• Pueden contener distintos tipos de datos (números,
cadenas, …)
• Los campos pueden tener nombre
• Creación de una lista
![Page 66: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/66.jpg)
LISTAS
• Acceso a un
componente concreto
de una lista (doble
corchete)
• Si se usa simple
corchete, se
accede a una
sublista > my.lst[[1]]
[1] 34453
> my.lst[[3]]
[1] 14.3 12.0 15.0 19.0
> my.lst[2]
$stud.name
[1] "John"
> my.lst[2:3]
$stud.name
[1] "John"
$stud.marks
[1] 14.3 12.0 15.0 19.0
![Page 67: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/67.jpg)
LISTAS
• Acceso a un componente de una lista por nombre:
• Acceder a la lista de nombres de una lista:
• Dando nombres a los componentes de una lista:
• Paso de lista a vector: unlist()
![Page 68: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/68.jpg)
OBJETOS EN R
• Escalares
• Vectores
• Factores
• Matrices
• Listas
• Data frames
![Page 69: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/69.jpg)
DATA FRAMES
• Es la estructura adecuada para almacenar tablas de datos,
porque permiten combinar en una matriz distintos tipos de datos (números, cadenas, …)
• Ejemplo de creación de data frame (se hace por columnas):
![Page 70: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/70.jpg)
DATA FRAMES
• Acceso por índice:
• Acceso por nombre de columna:
![Page 71: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/71.jpg)
DATA FRAMES. ACCESO POR SUBSETTING
![Page 72: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/72.jpg)
LEER DATA FRAMES DESDE FICHERO
100 a1 b1
200 a2 b2
300 a3 b3
400 a4 b4
> mydata = read.table("mydata.txt")
> mydata
V1 V2 V3
1 100 a1 b1
2 200 a2 b2
3 300 a3 b3
4 400 a4 b4
Col1,Col2,Col3
100,a1,b1
200,a2,b2
300,a3,b3
> mydata = read.csv("mydata.csv")
> mydata
Col1 Col2 Col3
1 100 a1 b1
2 200 a2 b2
3 300 a3 b3
![Page 73: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/73.jpg)
ESCRIBIR DATA.FRAMES EN FICHERO
• write.table(df, "mydata.txt")
• write.csv(df, "mydata.csv")
![Page 74: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/74.jpg)
FUNCIONES AVANZADAS
![Page 75: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/75.jpg)
FUNCIONES DE ALTO NIVEL
• Provienen de la programación funcional, donde
una característica es que las funciones son objetos
y se pueden asignar a variables o pasar como
argumentos
• Aplican una función a cada elemento de un
vector o lista. Devuelven un vector o lista. Evitan
bucles
• lapply, sapply, apply, tapply, mapply
• split
![Page 76: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/76.jpg)
FUNCIONES DE ALTO NIVEL: LAPPLY
• lapply, aplica una función a una lista y devuelve
una lista
![Page 77: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/77.jpg)
FUNCIONES DE ALTO NIVEL: SAPPLY
• sapply: como lapply, pero intenta convertir el
resultado a un vector (si todos los elementos de la
lista a la salida tienen longitud 1) o a una matriz (si
todos los elementos de la lista de salida tienen la
misma longitud y tipo)
![Page 78: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/78.jpg)
FUNCIONES DE ALTO NIVEL
• lapply con función sin nombre (anónima)
![Page 79: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/79.jpg)
FUNCIONES DE ALTO NIVEL: APPLY
• apply: aplica una función a cada fila (margin=1) o a cada columna
(margin=2) de una matriz
• Ej: calcula la media de cada columna, o la media de cada fila
![Page 80: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/80.jpg)
FUNCIONES DE ALTO NIVEL: APPLY
• rowSums = apply(x,1,sum)
• rowMeans = apply(x,1,mean)
• colSums = apply(x,2,sum)
• colMeans = apply(x,2,mean)
![Page 81: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/81.jpg)
FUNCIONES DE ALTO NIVEL: TAPPLY
• tapply: descompone el primer argumento en
grupos, y le aplica la función a cada grupo.
• En el ejemplo, los grupos van en la segunda columna de la
matriz. La media de valores que pertenecen al grupo a es 5,
la media de los valores que pertenecen al grupo b es 6
![Page 82: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/82.jpg)
SPLIT CON UN DATA.FRAME
![Page 83: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/83.jpg)
SPLIT CON UN DATA.FRAME
![Page 84: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/84.jpg)
SPLIT CON UN DATA.FRAME
![Page 85: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/85.jpg)
FUNCIONES DE ALTO NIVEL: MAPPLY
• Es como lapply, pero para funciones con 2 o mas
argumentos
![Page 86: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/86.jpg)
EJERCICIOS FUNCIONES ALTO NIVEL
1. Crear una lista con 5 vectores numéricos. Escribir
una función que ordene cada vector (nota: usar
la función sort() ).
2. Escribir una función que compute el valor mínimo
de cada columna de una matriz de cualquier
tamaño (cualquier número de columnas).
Probadla con una matriz aleatoria de 10x5
![Page 87: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/87.jpg)
PAQUETE PLYR: SPLIT/APPLY/COMBINE
• install.packages("plyr") #Sólo hay que hacerlo la primera vez
• library(plyr)
• ddply es el equivalente a tapply, pero para data.frames
• Sea la llamada a la función ddply
• ddply(dataframe, c(“var1”, “var2), mifuncion)
• Lo que hace esta función es:
1. Split: recorrer el dataframe para todas las posibles
combinaciones de los valores de las variables “var1” y “var2”.
Eso divide (split) el dataframe en varios subdataframes.
2. Apply: Para cada subdataframe se aplica “mifuncion”, la cual
también devuelve un dataframe.
3. Combine: El resultado final es la concatenación de todos los
dataframes.
![Page 88: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/88.jpg)
DDPLY (ES EL TAPPLY PARA DATA.FRAMES)
![Page 89: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/89.jpg)
DDPLY (ES EL TAPPLY PARA DATA.FRAMES)
• Ahora supongamos que queremos calcular esas
mismas medias para cada mes, pero diferenciando
la primera mitad del mes (dias 1-15) de la segunda
quincena (días después del 15)
• Primero añadimos una columna al data.frame
indicando la quincena (1 o 2), así:
![Page 90: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/90.jpg)
DDPLY (ES EL TAPPLY PARA DATA.FRAMES)
• Después usamos ddply con “Month” y “quincena”
![Page 91: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/91.jpg)
PAQUETE PLYR: SPLIT/APPLY/COMBINE
![Page 92: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/92.jpg)
PAQUETE PLYR: SPLIT/APPLY/COMBINE
![Page 93: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/93.jpg)
PLOTS BÁSICOS: CON BASE
• x=1:100
• y=x^2
• plot(x,y, col="red")
• z = x^2+10*x
• points(x,z, col="blue", type="l")
• legend("bottomright", c("uno",
"dos"), col=c("red", "blue"), pch=1)
![Page 94: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/94.jpg)
PLOTS BÁSICOS: CON BASE
• matplot(x,data.frame(y,z), col=c("red","blue"))
• legend("bottomright", c("uno", "dos"), col=c("red",
"blue"), pch=1)
•
![Page 95: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/95.jpg)
PLOTS BÁSICOS: CON LATTICE
• install.packages(“lattice”)
• library(lattice)
• xyplot(z+y~x, data.frame(x,y,z), auto.key=TRUE)
![Page 96: ANÁLISIS DE DATOS Ricardo Aler Mur - ocw.uc3m.esocw.uc3m.es/ingenieria-informatica/analisis-de-datos/tutoriales/... · •rm(list=ls()): borrar todos los objetos . TIPOS DE DATOS](https://reader031.fdocumento.com/reader031/viewer/2022021622/5ba24e0f09d3f2d14d8b9cfe/html5/thumbnails/96.jpg)
PLOTS BÁSICOS: CON GGPLOT2
• install.packages(“ggplot2”)
• library(ggplot2)
• misdatos = rbind(data.frame(x,valor=y,serie="una"), data.frame(x, valor=z, serie="dos"))
• qplot(x,valor,data=misdatos,colour=serie)