Capítulo 1: Introducción a R y RStudio

A. Interfaz RStudio

1. Cuatro secciones en Rstudio

Las “más importantes” son: scripts, consola y environment/files/plots/packages.

Para personalizar RStudio hay que ir a: Tools -> Global Options. Allí pueden cambiar el color del ambiente, tipo de letra, orden, etc. La idea es utilizar RStudio de la forma mas intuitiva para ustedes.

2. Escribir comentarios

(#) para escribir comentarios en el script. Si quiero marcar varias lineas como comentario: ctrl + shift + c

3. Índices

Es importante escribir índices para documentar sus códigos. Para observarlo debo escribir: ctrl + shift + o

Los títulos pueden estar jerarquizados:

# El mas importante
## Este es un poco menos importante
### Este es un poco menos importante que el anterior
#### El menos importante

Es importante actualizarlo constantemente para no perder funcionalidad.

B. Instalación de paquetes y ayuda

Los paquetes son basicamente conjuntos de funciones. Los paquetes se instalan una vez, pero se llaman siempre que se vayan a utilizar.

1. Librerías

Esto se puede hacer de dos maneras:

  1. Desde la pestaña packages en la esquina inferior derecha.

  2. Con comandos

install.packages("dplyr")
## Error in contrib.url(repos, "source"): trying to use CRAN without setting a mirror

Varios paquetes a la vez:

install.packages(c("dplyr","ggplot2","rio"))
## Error in contrib.url(repos, "source"): trying to use CRAN without setting a mirror

Error común:

install.packages("dplyr", "ggplot2")
## Error in install.packages("dplyr", "ggplot2"): unable to install packages

Por lo general es bueno instalarlas desde el inicio del trabajo dado que comúnmente usamos las mismas librerías al realizar análisis de datos. Con esta función le decimos a R que instale el paquete si este no está instalado (algo típico cuando cambiamos de computador):

if(!require(dplyr)) {install.packages("dplyr")}

Cargar librerías:

library(dplyr)

Si queremos ver que hay dentro de cada paquete:

ls("package:dplyr", all = TRUE) #ls = list objects

Importante: el paquete debe ser instalado una vez, pero cargado cada vez que se utilice. Muchas veces hay actualizaciones. Para revisar e instalarlas.

update.packages()
## Error in contrib.url(repos, type): trying to use CRAN without setting a mirror

Alternativamente puedo conectar paquete con función utilizando ::. Si hago esto no es necesario llamar a la librería para utilizar esa función en particular. No obstante, lo recomendable es cargar todas las librerías de los paquetes que voy a utilizar al inicio.

2. Función de ayuda

Sobre una función en particular:

help(mean) 
?mean 
mean #pulsar la tecla F1 
## function (x, ...) 
## UseMethod("mean")
## <bytecode: 0x7f92bc911ea8>
## <environment: namespace:base>
sd
## function (x, na.rm = FALSE) 
## sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x), 
##     na.rm = na.rm))
## <bytecode: 0x7f92bd9f2ea8>
## <environment: namespace:stats>

Sobre un paquete en particular:

help("dplyr") 
library(help="dplyr")

3. Shortcuts útiles

  • Esc: interrumpir el comando actual
  • Ctrl + s: guardar
  • tab: autocompletar
  • Ctrl + Enter: ejecutar línea
  • Ctrl + Shift + C: comentar
  • <-: Alt + - / option + -
  • %>%: ctrl + shift + m (pipe)
  • Ctrl + l: limpiar
  • Ctrl + alt + b: ejecutar todo hasta aquí (flechas en la consola me permiten ver los últimos comandos utilizados).
  • Shift + lineas: seleccionar varias lineas
  • Ctrl + f: buscar/remplazar
  • Ctrl + "flecha arriba" en la consola: ver comandos utilizados.

4. Limpiar “environment” en R

Eliminar todos los objetos:

rm(list=ls())

Eliminar sólo un objeto:

rm(data1)

Si quiero limpiar la consola tengo que apretar Ctrl + L.

5. Identificar el paquete de una función

Hay ocasiones en que queremos saber de que paquete es una función determinada. Para ello, revisar: https://sebastiansauer.github.io/finds_funs/

6. Error común

Por ejemplo:

x <- "hola"

Noten que en la consola aparece un signo +. En estos casos RStudio se detiene porque probablemente se les olvido un ) o bien un #. En estos casos hay que corregir el error para ejecutar nuevamente y luego apretar esc en la consola para seguir ejecutando los comandos.

C. Manipulación de objetos

1. Usar R como calculadora/ejecutar comandos

De manera separada (seleccionar las ordenes+ctrl+Enter):

2+2 
## [1] 4
3*5^(1/2)
## [1] 6.708204

Ejecutar todas las instrucciones:

2+2 ; 3*5^(1/2)
## [1] 4
## [1] 6.708204
3+4 
## [1] 7
5*4 
## [1] 20
8/4 
## [1] 2
6^7
## [1] 279936
6^77
## [1] 8.272681e+59
log(10) 
## [1] 2.302585
log(1)
## [1] 0
sqrt(91) # raiz cuadrada
## [1] 9.539392
round(7.3) # redondear
## [1] 7

Incluso grandes operaciones:

sqrt(91) + 4892788*673 - (log(4)*round(67893.9181, digits = 2))
## [1] 3292752213

Incluso uso de números imaginarios:

2i+5i+sqrt(25i)
## [1] 3.53553+10.53553i

2. Creacion de objetos: asignaciones y funciones

con el signo <- asignamos valores. También se puede utilizar =, pero no es recomendable, ya que confunde.

y <- 2 + 4 
y
## [1] 6

Las asignaciones son MUDAS. Si no las llamo, no aparecen en la consola. Lo anterior es una operación sencilla, pero lo que queremos es generar asignaciones con funciones.

Podemos utilizar funciones. Las funciones son la parte central del uso de R. Algunas funciones vienen instaladas en R. Otras funciones hay que obtenerlas desde paquetes. También es posible escribir tus propias funciones (). Las funciones estan por lo general escritas en paréntesis, por ejemplo filter(). Hay ocasiones en que las funciones estan relacionadas con un paquete específico dplyr::filter().

  • Ejemplo 1: función simple
sqrt(49)
## [1] 7
  • Ejemplo 2: sobre una base de datos
summary(mtcars$mpg)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   10.40   15.43   19.20   20.09   22.80   33.90

Nota: mtcars viene incluidad en R.

Para ver mas:

data()

Otra función:

x <- 2 
y <- 3
z <-c(x,y) 
z
## [1] 2 3

Uso de funciones aritméticas:

mean(z) 
## [1] 2.5
median(z)
## [1] 2.5

Relaciones entre objetos:

w <- mean(z)

Creación de objetos por asignación:

a <- 3+10 
b <- 2*4

Comparar objetos:

a > b
## [1] TRUE

Notar que las asignaciones son silenciosas:

a 
## [1] 13
b 
## [1] 8
# o altenativamente utilizar print 
print(a) 
## [1] 13
print(b)
## [1] 8

Creación de objetos usando funciones:

valores <- c(a,b)
promedio <- mean(valores)
print(promedio)
## [1] 10.5
promedio
## [1] 10.5

Podemos escribir un promedio aquí usando función mean():

a <- 2 
b <- 5
valores1 <- c(a,b)
promedio1 <-mean(valores1)
print(promedio1)
## [1] 3.5

Limpiamos datos nuevamente:

rm(list = ls()) 
rm(promedio)

3. Creacion de objetos y asignaciones

Es importante espaciar codigos. Definimos dos vectores utilizando la función c()

educ <- c(8,12,8,11,16,14,8,10,14,12)
ingreso <- c(325,415,360,380,670,545,350,420,680,465)

Calculamos promedio, desviación estándar y correlación

mean(ingreso)
## [1] 461
promedioingreso <- mean(ingreso)

sd(ingreso)
## [1] 129.1382
sdingreso <- sd(ingreso)

cor(educ, ingreso)
## [1] 0.9110521
coreduing <- cor(educ,ingreso)

Graficamos

plot(educ, ingreso)

Estimar una regresión lineal

lm(ingreso ~ educ)
## 
## Call:
## lm(formula = ingreso ~ educ)
## 
## Coefficients:
## (Intercept)         educ  
##       -8.71        41.57

Ejercicio 1: nombrar objetos

De los siguientes ejemplos, ¿Cuáles son nombres de variables válidas en R?

# min_height
# max.height
# _age
# .mass
# MaxLength
# Min-length
# 2widths
# Calsius2kelvin

D. Tipos de objetos

1. Vectores

R opera componente por componente, por lo que es muy sencillo poder trabajar con vectores y matrices.

Para crear un vector utilizamos la funcion c()

x <- c(1,2,3,4,5)
#o bien
y <- c(6:8)

Veamos los vectores

z <- x + y 
z
## [1]  7  9 11 10 12

Supongamos los siguientes vectores:

x<-c(1:4)
y<-c(1:3)

¿Cuál es su longitud?

length(x)
## [1] 4
length(y)
## [1] 3

Si no tienen la misma longitud, ¿cual sería el resultado de x + y?

z <- x + y 
z
## [1] 2 4 6 5

IMPORTANTE: En este caso R realiza la operación de todos modos, pero nos indica que hay una advertencia de que sus dimensiones difieren. Lo relevante de los vectores es que sólo se puede concatenar elementos del mismo tipo, de lo contrario R nos arroja error.

x <- rep(1.5:9.5,4) #genera repeticiones de los valores definidos 
y <- c(20:30)
x1 <- c(1,2)
x2 <- c(3,4)
x3 <- c(x1,x2)
x4 <- c(c(1,2), c(3,4))

Subconjunto de un vector

y[3] # obtener el tercer elemento 
## [1] 22
y[2:4] 
## [1] 21 22 23
y[4:2]
## [1] 23 22 21
y[c(2,6)]
## [1] 21 25
y[c(2,16)]
## [1] 21 NA

2. Matrices

a. Definir matrices

Sintaxis general

mi.matriz <- matrix(vector,
                    ncol = num_columnas, nrow = num_filas,
                    byrow = valor_logico,
                    dimnames = list(vector_nombres_filas,
                                   vector_nombres_columnas)
)
## Error in as.vector(x, mode): cannot coerce type 'closure' to vector of type 'any'

Para crear matrices utilizamos la función matrix()

x <- matrix (data = c(1,2,3,4), 
             nrow = 2, 
             ncol = 2) 


x1 <- matrix(c(1,2,3,4), 
             2, 
             2)

No es necesario poner data=, pero por orden mental es mejor hacerlo.

x 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
x1
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4

Notar que por DEFECTO rellena columna por columna. Podemos explicitar que queremos realizar la matriz fila por fila

y <- matrix(data = c(1:4),
          nrow = 3, 
          ncol = 2, 
          byrow = TRUE)
y
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    1    2

Podemos saber cual es la dimensión de x

dim(y)
## [1] 3 2
dim(y)[1] # cantidad de filas
## [1] 3
dim(y)[2] # cantidad de columnas
## [1] 2
y<- matrix(c(1,2,3,4), nrow=2, ncol=2, byrow=2)
y
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4

Los va a repetir!

y <- matrix(c(1,2,3,4), nrow=2, ncol=3, byrow= 2) 
y
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    1    2

Notar que el orden en cualquier matrix es filas x columnas. Podemos también omitir la cantidad de filas o columnas en la matriz y obtenemos el mismo resultado

y <- matrix(c(1:4), 2, byrow=T)
y 
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4

En el caso de crear matrices vacías hay que definir las dimensiones

y <- matrix(nrow=3, ncol=3)
y #útil para los loops
##      [,1] [,2] [,3]
## [1,]   NA   NA   NA
## [2,]   NA   NA   NA
## [3,]   NA   NA   NA

Darle nombre a las filas y columnas

y <- matrix (c(1:4), 2, byrow = FALSE, 
             dimnames=list(c("X1","X2"),c("Y1", "Y2")))
y
##    Y1 Y2
## X1  1  3
## X2  2  4

Se puede realizar desde las funciones colnames y rownames

colnames(x) <- c("Variable 1", "Variable 2")
rownames(x) <- c("a1", "a2")
x
##    Variable 1 Variable 2
## a1          1          3
## a2          2          4

Añadir filas o columnas a una matriz

w <- c(5,6)

b. Unir matrices

Unir mediante filas (queda con el nombre del vector la observación)

z <- rbind(x,w) 
z
##    Variable 1 Variable 2
## a1          1          3
## a2          2          4
## w           5          6

Unir mediante columnas

z <- cbind(x,w) 
z
##    Variable 1 Variable 2 w
## a1          1          3 5
## a2          2          4 6

¿Y si tienen diferente cantidad de filas y/o columnas? repite el vector o observaci?n con menor longitud

x <- matrix(c(1:9),3)
x
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
y <- c(5,6)
y
## [1] 5 6
z<-rbind(x,y)
z 
##   [,1] [,2] [,3]
##      1    4    7
##      2    5    8
##      3    6    9
## y    5    6    5

Podemos pasar un vector a una matriz

x<-1:10
x
##  [1]  1  2  3  4  5  6  7  8  9 10
dim(x)<-c(2,5)
x
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10

Trasponer matrices:

x <- matrix(c(1:9),3)
xtraspuesta <- t(x)

Potencialmente se pueden hacer muchas más operaciones que involucren matrices. Por ejemplo, subconjuntos de una matriz: segundo y cuarto elemento de la segunda fila:

M <- matrix(1:8, nrow=2)
M
##      [,1] [,2] [,3] [,4]
## [1,]    1    3    5    7
## [2,]    2    4    6    8
M[1,1]
## [1] 1
M[1,]
## [1] 1 3 5 7
M[,2]
## [1] 3 4
M[2,c(2,4)]
## [1] 4 8