Documente Academic
Documente Profesional
Documente Cultură
Francesc Carmona
fcarmona@ub.edu
15 de febrero de 2007
1. Introducción 7
1.1. R y S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. Obtención y instalación de R . . . . . . . . . . . . . . . . 10
1.3. Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4. Documentación . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5. Ayudas sobre R . . . . . . . . . . . . . . . . . . . . . . . . 16
2. Empezamos 17
2.1. Inicio de una sesión en R . . . . . . . . . . . . . . . . . . 17
2.2. Una primera sesión . . . . . . . . . . . . . . . . . . . . . . 18
2.3. R como calculadora . . . . . . . . . . . . . . . . . . . . . . 19
2.4. Ayuda dentro del programa . . . . . . . . . . . . . . . . . 20
2.5. Instalación de paquetes adicionales . . . . . . . . . . . . . 21
2.6. Usar R desde un editor . . . . . . . . . . . . . . . . . . . . 22
2.7. Un ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3. Objetos en R 24
2
3.1. ¿Qué objetos? . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2. Tipos de objetos . . . . . . . . . . . . . . . . . . . . . . . 25
3.3. Atributos de los objetos . . . . . . . . . . . . . . . . . . . 28
3.4. Nombres para los objetos . . . . . . . . . . . . . . . . . . 30
3.5. Operaciones aritméticas . . . . . . . . . . . . . . . . . . . 31
3.6. Operadores lógicos . . . . . . . . . . . . . . . . . . . . . . 33
3.7. Discretizar datos . . . . . . . . . . . . . . . . . . . . . . . 35
3.8. Operaciones con conjuntos . . . . . . . . . . . . . . . . . 36
4. Vectores 37
4.1. Generación de secuencias . . . . . . . . . . . . . . . . . . 37
4.2. Generación de secuencias aleatorias . . . . . . . . . . . . 39
4.3. Selección de elementos de un vector . . . . . . . . . . . . 40
4.4. Valores perdidos . . . . . . . . . . . . . . . . . . . . . . . . 41
4.5. Ordenación de vectores . . . . . . . . . . . . . . . . . . . 43
4.6. Vectores de caracteres . . . . . . . . . . . . . . . . . . . . 44
4.7. Factores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5. Arrays y matrices 47
3
5.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.2. Operaciones con matrices . . . . . . . . . . . . . . . . . . 51
5.3. Combinación de arrays . . . . . . . . . . . . . . . . . . . . 54
6. Data.frames 55
6.1. Definición . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.2. La familia apply . . . . . . . . . . . . . . . . . . . . . . . . 58
6.3. Tablas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.4. Ejemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
7. Muchos objetos 63
7.1. Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
7.2. Los objetos que tenemos . . . . . . . . . . . . . . . . . . . 64
7.3. En resumen . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8. Datos 70
8.1. Lectura de datos . . . . . . . . . . . . . . . . . . . . . . . 70
8.2. Guardar y leer datos . . . . . . . . . . . . . . . . . . . . . 71
8.3. Importar datos de Excel . . . . . . . . . . . . . . . . . . . 72
4
8.4. Exportar datos . . . . . . . . . . . . . . . . . . . . . . . . 74
9. Gráficos 75
9.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . 75
9.2. El comando plot . . . . . . . . . . . . . . . . . . . . . . . 76
9.3. Identificación interactiva de datos . . . . . . . . . . . . . 80
9.4. Múltiples gráficos por ventana . . . . . . . . . . . . . . . . 81
9.5. Datos multivariantes . . . . . . . . . . . . . . . . . . . . . 82
9.6. Boxplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.7. Un poco de ruido . . . . . . . . . . . . . . . . . . . . . . . 84
9.8. Dibujar rectas . . . . . . . . . . . . . . . . . . . . . . . . . 85
9.9. Más gráficos . . . . . . . . . . . . . . . . . . . . . . . . . . 86
9.10. Guardar los gráficos . . . . . . . . . . . . . . . . . . . . . 87
10. Funciones 88
10.1. Definición de funciones . . . . . . . . . . . . . . . . . . . . 88
10.2. Argumentos . . . . . . . . . . . . . . . . . . . . . . . . . . 89
10.3. Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.4. Control de ejecución . . . . . . . . . . . . . . . . . . . . . 92
5
10.5. Cuando algo va mal . . . . . . . . . . . . . . . . . . . . . 95
10.6. Ejecución no interactiva . . . . . . . . . . . . . . . . . . . 97
1.1. R y S
7
Actualmente, S y R son los dos lenguajes más utilizados en
investigación en estadı́stica.
Los grandes atractivos de R/S son:
9
1.2. Obtención y instalación de R
10
1.3. Paquetes
Los que no son parte del sistema base, pero son recommended
(ej., survival, nlme).
En GNU/Linux y Windows ya forman parte de la distribución
estándar.
11
1.4. Documentación
Writing R extensions.
R data import/export.
12
Documentación general:
13
Estadı́stica:
Otros documentos en
http://cran.es.r-project.org/other-docs.html
14
S-PLUS 6.0 for Unix. Guide to statistics. Vol. I & II. En
http://www.insightful.com/support/documentation.asp?DID=3
15
1.5. Ayudas sobre R
FAQ: http://cran.es.r-project.org/faqs.html
16
2. Empezamos
Windows:
Hacer doble-click en el icono. Se abrirá “Rgui”.
Desde una “ventana del sistema” ejecutar Rterm o desde
Inicio-Ejecutar...
C:\Archivos de programa\R\R-2.4.1\bin\Rterm.exe
parecido a R en Unix o Linux.
Iniciar R desde Tinn-R, XEmacs o un editor apropiado.
GNU/Linux:
Escribir “R” en una shell.
Iniciar R desde (X)Emacs (M-X R).
18
2.3. R como calculadora
> 2+2
> sqrt(10)
> 2*3*4*5
> # Intereses sobre 1000 euros
> 1000*(1+0.075)^5 - 1000
> # R conoce pi
> pi
> # Circunferencia de la Tierra en el Ecuador en km
> 2*pi*6378
> # Convertimos ángulos a radianes y luego calculamos el seno
> sin(c(0,30,45,60,90)*pi/180)
19
2.4. Ayuda dentro del programa
?rnorm
help.start()
?help.search
help.search("normal")
?apropos
apropos("normal")
?demo
!Cuidado¡
20
2.5. Instalación de paquetes adicionales
Windows:
Desde el menú Packages->Install package(s)...
Primero nos pide seleccionar el “CRAN mirror”.
Desde R, con install.packages() como en GNU/Linux.
Desde una “ventana del sistema” o desde Inicio-Ejecutar...
Rcmd INSTALL paquete
Desde la interface de XEmacs.
GNU/Linux:
R CMD INSTALL paquete-x.y.z.tar.gz
Permite instalar aunque uno no sea root (especificar el dir).
Más cómodo, desde R,
install.packages(), update.packages(), etc.
También permiten instalar si no eres root (especificar lib.loc).
21
2.6. Usar R desde un editor
22
2.7. Un ejemplo
23
3. Objetos en R
24
3.2. Tipos de objetos
funciones:
Constan de
lista de argumentos
código
entorno
25
Objetos para los datos:
26
list: vector generalizado.
Cada lista está formada por componentes que pueden ser otras
listas. Cada componente puede ser de distinto tipo. Son
contenedores generales de datos. Muy flexibles, pero sin
estructura. Muchas funciones devuelven una lista o conjunto de
resultados de distinta longitud y distinto tipo.
> una.lista <- c(un.vector = 1:10,
+ una.palabra = "hola",
+ una.matriz = matrix(rnorm(20), ncol = 5),
+ lista2 = c(a = 5,
+ b = factor(c("a", "b"))))
27
3.3. Atributos de los objetos
Clase: vector alfanumérico con la lista de las clases del objeto: class
28
Ejemplos:
29
3.4. Nombres para los objetos
R es “case-sensitive”: x != X.
Otras consideraciones:
• El uso del “.” es distinto del de C++.
• Mejor evitar nombres que R usa (ej., “c”) (se puede arreglar).
> c <- 4; x <- c(3, 8); c
> rm(c); c
• Las asignaciones se hacen con "<-" y se recomiendan los
espacios. El signo "=" se reserva para los argumentos de las
funciones.
> x<-1:5 # Estilo incorrecto
> x <- 1:5 # Mucho mejor
30
3.5. Operaciones aritméticas
31
Principales operaciones aritméticas:
otras:
max, min, range, pmax, pmin, mean, median, var, sd, quantile
sum, prod, diff cumsum, cumprod, cummax, cummin
Ejemplo:
> data(presidents)
> help(presidents)
> range(presidents, na.rm = TRUE)
> which.min(presidents)# 28
> which.max(presidents)# 2
32
3.6. Operadores lógicos
33
Ejemplo:
34
3.7. Discretizar datos
La función split(x,f)
> split(peso,trat)
> split(peso,trat)$A
La función cut
> vv <- rnorm(100)
> cut1 <- cut(vv, 5)
> table(cut1)
>
> cut2 <- cut(vv, quantile(vv, c(0, 1/4, 1/2, 3/4, 1)))
> summary(cut2)
> class(cut2)
35
3.8. Operaciones con conjuntos
36
4. Vectores
37
> rep(1, 5)
> x <- 1:3; rep(x, 2)
> y <- rep(5, 3); rep(x, y)
> rep(1:3, rep(5, 3))
> rep(x, x)
> rep(x, length = 8)
> gl(3, 5) # como rep(1:3, rep(5, 3))
> gl(4, 1, length = 20) # !Alerta! gl genera factores
> gl(3, 4, label = c("Sano", "Enfermo", "Muerto"))
> expand.grid(edad = c(10, 18, 25),
> sexo = c("Macho", "Hembra"), loc = 1:3)
38
4.2. Generación de secuencias aleatorias
> sample(5)
> sample(5, 3)
> x <- 1:10
> sample(x)
> sample(x, replace = TRUE)
> sample(x, length = 2* length(x), replace = TRUE)
> probs <- x/sum(x)
> sample(x, prob = probs)
39
4.3. Selección de elementos de un vector
40
4.4. Valores perdidos
41
Para “modelling functions” (ej. lm) lo mejor es usar
na.omit
na.exclude
Esta última es más conveniente para generar predicciones,
residuos, etc.
42
4.5. Ordenación de vectores
43
4.6. Vectores de caracteres
44
4.7. Factores
45
Si queremos convertir un vector factor en numérico:
> x <- c(34, 89, 1000); y <- factor(x); y
> as.numeric(y) # mal
> # los valores han sido recodificados
> as.numeric(as.character(y)) # bien
46
5. Arrays y matrices
5.1. Definiciones
47
Con las coordenadas se obtienen los elementos particulares, como
en los vectores:
> a[1,1,1]; a[1,1,2]; a[3,4,2]
48
Ejemplo:
49
Otro ejemplo:
50
5.2. Operaciones con matrices
qr(A) : descomposición QR
51
Las funciones var, cov y cor calculan la varianza de x y la
covarianza o correlación de x y y si éstos son vectores. Cuando x y
y son matrices, entonces calculan las covarianzas (o correlaciones)
entre las columnas de x y las columnas de y.
> data(longley)
> (Cl <- cor(longley))
> ## Graphical Correlation Matrix:
> symnum(Cl) # highly correlated
52
La función outer(X, Y, FUN="*", ...) proporciona por defecto el
producto exterior de los dos arrays. Sin embargo, podemos
introducir otras funciones e incluso nuestras propias funciones.
> x <- 1:9; names(x) <- x
> # Multiplication & Power Tables
> x %o% x
> y <- 2:8; names(y) <- paste(y,":",sep="")
> outer(y, x, "^")
53
5.3. Combinación de arrays
54
6. Data.frames
6.1. Definición
55
También podemos añadir alguna columna a una matriz como
datos:
> playa <- c("si","si","no","no")
> datos.df <- data.frame(datos,playa)
> datos.df$playa
56
Además, en los data.frame los “character vectors” se convierten
en factores.
57
6.2. La familia apply
58
Utilizar apply es generalmente mucho más eficiente que un bucle.
Además de más claro, más fácil, etc..
> parameters <- cbind(mean = -5:5, sd = 2:12)
> z.data <- matrix(rnorm(1000 * 11), nrow = 11)
> data <- (z.data * parameters[,2]) + parameters[,1]
> apply(data, 1, mean); apply(data, 1, sd)
59
La función tapply(x,y,función) calcula la función especificada
sobre el objeto x según las categorı́as de y.
> x <- c(19,14,15,17,20,23,19,19,21,18)
> trat <- c(rep("A",5),rep("B",5))
> x.media <- tapply(x,trat,mean)
> x.media
61
6.4. Ejemplo
62
7. Muchos objetos
7.1. Listas
63
7.2. Los objetos que tenemos
R tiene una lista donde buscar los objetos accesibles: “the search
list”. Cargar un paquete extiende la “search list”.
Para obtener la lista de los directorios, llamados “databases”:
> search()
> library(MASS)
> search()
64
Para que un objeto o directorio sea fácilmente accesible lo
podemos poner en la “search list” de R. En el caso de un
data.frame, esto permite acceder directamente a las columnas por
su nombre.
> str(datos.df) # es un data.frame
> A # error
> attach(datos.df)
> A # ahora sı́
> plot(A,B) # en lugar de plot(datos.df$A,datos.df$B)
La actualización no es dinámica
> datos.df$D <- 1:4 # una nueva columna
> datos.df # aquı́ está
> D # pero aquı́ no
Para desconectar
> detach(objeto)
65
Para borrar objetos concretos
> rm(objetos)
66
¡Alerta!
> datos.df
> A <- 1
> A # usa la última
> search() # el search path
> detach(datos.df)
> attach(datos.df)
> D
> A # cuidado
67
7.3. En resumen
69
8. Datos
Para leer un fichero simple, con los datos separados por espacios
en blanco, tabuladores o saltos de lı́nea, se utiliza la instrucción
read.table en la forma:
> fichero.df <- read.table("c:/dir/mi.fichero",
+ header = TRUE, sep = "",
+ comment.char = "")
71
Podemos guardar todos los objetos con
> save.image() # guardado como ".RData"
> save.image(file = "nombre.RData")
72
8.3. Importar datos de Excel
73
8.4. Exportar datos
9.1. Introducción
75
9.2. El comando plot
76
Variaciones de plot:
> z <- cbind(x,y)
> plot(z)
> plot(y ~ x)
> plot(log(y + 1) ~ x) # transformación de y
> plot(x, y, type = "p")
> plot(x, y, type = "l")
> plot(x, y, type = "b")
> plot(c(1,5), c(1,5))
> legend(1, 4, c("uno", "dos", "tres"), lty = 1:3,
+ col = c("red", "blue", "green"),
+ pch = 15:17, cex = 2)
77
Puntos.
> points(x, y, pch = 3, col = "red")
Tipos de puntos.
> plot(c(1, 10), c(1, 3), type = "n", axes = FALSE,
+ xlab = "", ylab="")
> points(1:10, rep(1, 10), pch = 1:10, cex = 2, col = "blue")
> points(1:10, rep(2, 10), pch = 11:20, cex = 2, col = "red")
> points(1:10, rep(3, 10), pch = 21:30, cex = 2,
+ col = "blue", bg = "yellow")
Tipos de lı́neas.
> plot(c(0, 10), c(0, 10), type = "n", xlab ="",
+ ylab ="")
> for(i in 1:10)
+ abline(0, i/5, lty = i, lwd = 2)
> for(i in 1:10)
+ abline(0, i/5, lty = i, lwd = 2)
78
lty permite especificaciones más complejas (longitud de los
segmentos que son alternativamente dibujados y no dibujados).
79
9.3. Identificación interactiva de datos
80
9.4. Múltiples gráficos por ventana
81
9.5. Datos multivariantes
82
9.6. Boxplots
Los diagramas de caja son muy útiles para ver rápidamente las
principales caracterı́sticas de una variable cuantitativa, o comparar
entre variables.
> attach(Y)
> boxplot(weight)
> plot(sexo, weight)
> detach()
> boxplot(weight ~ sexo, data = Y,
+ col = c("red", "blue"))
83
9.7. Un poco de ruido
84
9.8. Dibujar rectas
85
9.9. Más gráficos
86
9.10. Guardar los gráficos
87
10. Funciones
88
10.2. Argumentos
89
args(nombre.funcion) nos muestra los argumentos de cualquier
función.
90
10.3. Scope
Un ejemplo
> cubo <- function(n) {
+ sq <- function() n*n # aquı́ n no es un argumento
+ n*sq()
+ }
91
10.4. Control de ejecución
Principales instrucciones
if(cond) expr
if(cond) cons.expr else alt.expr
for(var in seq) expr
while(cond) expr
repeat expr
break
next
92
if (cond.logica) instrucción else instrucción.alternativa
> f4 <- function(x) {
+ if(x > 5) print("x > 5")
+ else {
+ y <- runif(1)
+ print(paste("y is ", y))
+ }
+ }
93
for (variable.loop in valores) instrucción
> for(i in 1:10) cat("el valor de i es", i, "\n")
94
10.5. Cuando algo va mal
95
Ejemplo:
96
10.6. Ejecución no interactiva
Con BATCH:
Rcmd BATCH mi.fichero.con.codigo.R
98