Autores: Amparo Baíllo y José R. Berrendero
R es un conjunto integrado de funciones para manejo de datos, cálculo y gráficos
La aplicabilidad de R se puede extender mediante paquetes de funciones. La distribución básica contiene aproximadamente 25 paquetes.
Becker, Chambers y Wilks desarrollaron en los años 70 el lenguaje S en los Bell labs.
S tiene implementaciones comerciales (SPlus, muy utilizado en los años 90)
Ross Ihaka y Robert Gentleman (R & R) escriben R en 1996
Actualmente, es desarrollado y mantenido por un equipo de unas 20 personas, el llamado core group.
Es gratuito
Al ser código abierto, una numerosa comunidad de usuarios ha contribuido a ampliar sus aplicaciones
Es mucho más flexible que otros productos comerciales
En la actualidad es el software estándar en estadística computacional
Existen versiones para Windows, Mac y Linux
La página de R: www.r-project.org/
Documentación oficial: cran.r-project.org/manuals.html
Blogs: www.r-bloggers.com
Paquetes de R: cran.at.r-project.org/web/packages/
RStudio: www.rstudio.com/ide/
x <- 10
x <- c(2, 3, 4)
ls()
rm()
help()
o help.search()
getwd()
setwd()
. En Rstudio basta ir a Session -> Set working directory -> Choose directory
y elegir el directorio adecuado..RData
En orden de menor a mayor complejidad: vectores, factores, matrices, listas, data frames
Hay otros tipos más específicos: series temporales, imágenes, etc
1:5
## [1] 1 2 3 4 5
seq(2, 10, 2)
## [1] 2 4 6 8 10
rep(c(1,3), 4)
## [1] 1 3 1 3 1 3 1 3
3 + c(1,2,3)
## [1] 4 5 6
c(1,2) + c(7,8,9)
## Warning in c(1, 2) + c(7, 8, 9): longitud de objeto mayor no es múltiplo de
## la longitud de uno menor
## [1] 8 10 10
Inf
= Infinito
3/0 # un número distinto de 0 dividido por 0 da infinito
## [1] Inf
NaN
= Not a Number = resultado imposible de calcular
0/0 # 0 dividido por 0 es una indeterminación
## [1] NaN
NA
= Not Available = representa un valor numérico perdido
Los siguientes datos son medidas morfométricas de 8 pájaros:longitud del ala (Wingcrd
), pata (Tarsus
), cabeza (Head
) y peso (Wt
).
Datos = read.table("MorphBirds.txt",header=TRUE)
Datos
## Wingcrd Tarsus Head Wt
## 1 59.0 22.3 31.2 9.5
## 2 55.0 19.7 30.4 13.8
## 3 53.5 20.8 30.6 14.8
## 4 55.0 20.3 30.3 15.2
## 5 52.5 20.8 30.3 15.5
## 6 57.5 21.5 30.8 15.6
## 7 53.0 20.6 32.5 15.6
## 8 55.0 21.5 NA 15.7
x <- (1:5)^2
x[2]
## [1] 4
x[c(2,5)]
## [1] 4 25
x[-c(2,5)]
## [1] 1 9 16
x <- (1:5)^2
x[x > 15]
## [1] 16 25
which(x>15)
## [1] 4 5
Toman los valores TRUE
y FALSE
Se generan al evaluar condiciones:
x = rnorm(7)
x > 0
## [1] TRUE TRUE TRUE FALSE TRUE FALSE FALSE
Se usan operadores lógicos para escribir condiciones más complejas:
< , <= , > , >= , == , != , & , | , !
En operaciones aritméticas TRUE
toma el valor 1 y FALSE
toma el valor 0
x <- -10:20
sum(x>0)
## [1] 20
sum(x==0)
## [1] 1
Ejercicio: Escribe una línea de código que determine el número de coordenadas de un vector que son menores que -1 o mayores que 2.
factor()
.respuesta <- c('si', 'no', 'si', 'no', 'no', 'no', 'si')
respuesta <- factor(respuesta)
respuesta
## [1] si no si no no no si
## Levels: no si
data = c(1,2,2,3,1,2,3,3,1,2,3,3,1)
fdata = factor(data)
fdata
## [1] 1 2 2 3 1 2 3 3 1 2 3 3 1
## Levels: 1 2 3
rdata = factor(data, labels=c("I","II","III"))
rdata
## [1] I II II III I II III III I II III III I
## Levels: I II III
Cálculos por niveles: Se usa la función tapply
cuando queremos llevar a cabo un cálculo para los valores correspondientes a cada nivel de un factor.
respuesta
## [1] si no si no no no si
## Levels: no si
edades <- c(20, 25, 34, 20, 37, 43, 40)
tapply(edades, respuesta, mean)
## no si
## 31.25000 31.33333
Las matrices son también vectores pero con dos atributos adicionales: número de filas y número de columnas
Los vectores no son matrices con una fila o con una columna
Para crear una matriz
matrix(1:3, nrow = 2, ncol = 3)
## [,1] [,2] [,3]
## [1,] 1 3 2
## [2,] 2 1 3
x <- matrix(1:9, 3,3)
x
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
c(1,2) + x
## Warning in c(1, 2) + x: longitud de objeto mayor no es múltiplo de la
## longitud de uno menor
## [,1] [,2] [,3]
## [1,] 2 6 8
## [2,] 4 6 10
## [3,] 4 8 10
x <- matrix(5:15, 3, 3)
## Warning in matrix(5:15, 3, 3): la longitud de los datos [11] no es un
## submúltiplo o múltiplo del número de filas [3] en la matriz
x
## [,1] [,2] [,3]
## [1,] 5 8 11
## [2,] 6 9 12
## [3,] 7 10 13
x[x>6]
## [1] 7 8 9 10 11 12 13
Extraer submatrices
x[1,2]
## [1] 8
x[,3]
## [1] 11 12 13
x[3,-1]
## [1] 10 13
Pegar vectores
y <- 1:3
z <- 4:6
cbind(y,z)
## y z
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
rbind(y,z)
## [,1] [,2] [,3]
## y 1 2 3
## z 4 5 6
x
## [,1] [,2] [,3]
## [1,] 5 8 11
## [2,] 6 9 12
## [3,] 7 10 13
mean(x)
## [1] 9
apply(x,2,mean)
## [1] 6 9 12
A = matrix(1:4,2,2) ; B = matrix(5:8,2,2)
A %*% B
## [,1] [,2]
## [1,] 23 31
## [2,] 34 46
det(A)
## [1] -2
A * B
## [,1] [,2]
## [1,] 5 21
## [2,] 12 32
t(A)
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
diag(A)
## [1] 1 4
solve(A)
## [,1] [,2]
## [1,] -2 1.5
## [2,] 1 -0.5
eigen(A) # Devuelve una lista
## eigen() decomposition
## $values
## [1] 5.3722813 -0.3722813
##
## $vectors
## [,1] [,2]
## [1,] -0.5657675 -0.9093767
## [2,] -0.8245648 0.4159736
b = c(1,3)
solve(A,b)
## [1] 2.5 -0.5
list
milista <- list(nombre='Pepe',no.hijos=3,
edades.hijos=c(4,7,9))
str(milista)
## List of 3
## $ nombre : chr "Pepe"
## $ no.hijos : num 3
## $ edades.hijos: num [1:3] 4 7 9
milista$nombre
## [1] "Pepe"
Los componentes de la lista están numerados:
milista[[1]]
## [1] "Pepe"
También podemos extraer las componentes así:
milista$edades.hijos
## [1] 4 7 9
milista$edades.hijos[2]
## [1] 7
eigen
)AutoV = eigen(A) # Autovalores y autovectores de A
AutoV$values
## [1] 5.3722813 -0.3722813
AutoV[[2]]
## [,1] [,2]
## [1,] -0.5657675 -0.9093767
## [2,] -0.8245648 0.4159736
data.frame
x <- 7:9
y <- c('a','b','c')
mifichero <- data.frame(edad=x, grupo=y)
mifichero
## edad grupo
## 1 7 a
## 2 8 b
## 3 9 c
mifichero$edad
## [1] 7 8 9
mifichero[1,]
## edad grupo
## 1 7 a
Admiten los comandos lapply
y sapply
Datos de duración y tiempo de espera entre erupciones del geyser Old faithful
sapply(faithful,summary)
## eruptions waiting
## Min. 1.600000 43.00000
## 1st Qu. 2.162750 58.00000
## Median 4.000000 76.00000
## Mean 3.487783 70.89706
## 3rd Qu. 4.454250 82.00000
## Max. 5.100000 96.00000
Podemos ver la lista de librerías instaladas en nuestro ordenador pinchando en la pestaña Packages.
Las que están cargadas en la actual sesión de R aparecen marcadas con \(\LARGE \checkmark\).
Si una librería no está cargada, podemos cargarla marcando con \(\LARGE \checkmark\) o escribiendo en la consola:
library("splines")
Si una librería no aparece en la lista es porque no está instalada. Para instalar una librería, pinchamos en Install
(pestaña Packages
), escribimos el nombre de la librería en el cuadro de diálogo y pinchamos en el botón Install
del cuadro de diálogo.
Desde un fichero de texto situado en una web
enlace <- 'http://verso.mat.uam.es/~joser.berrendero/datos/notas.txt'
notas <- read.table(enlace, sep = " ", dec = ",", header = TRUE)
Significado de las opciones utilizadas:
argumento | valor | efecto |
---|---|---|
sep | Espacio en blanco | El carácter que se usa para separar variables |
dec | , | Una coma separa la parte entera y la decimal de cada número |
header | TRUE | La primera línea contiene los nombres de las variables |
En lugar del enlace, se puede dar simplemente el nombre de un fichero situado en el directorio de trabajo.
Si el fichero está en formato csv
(variables separadas por comas) se puede usar read.csv
en lugar de read.table
.
Muchos programas (excel, SPSS) permiten guardar los datos en formato de texto o csv.
Una vez guardados los datos en uno de estos formatos, podemos usar read.table
o read.csv
para llevarlos a R.
Cómo importar datos desde un fichero excel
Hay más de una librería que podemos utilizar: XLConnect, Readxl, gdata, xlsx.
También podemos hacerlo “manualmente”: en la esquina superior derecha del RStudio, pinchamos en Import Dataset
dentro de la pestaña Environment
. Seleccionamos el tipo de fichero que queramos importar y luego lo buscamos en el equipo. Finalmente pinchamos en el botón Import
.