Formación PDI - Universidad de Málaga
Instalación R y RStudio
Aspectos generales sobre R y Rstudio
Instalación de R:
Instalación de RStudio:
Important
Conexión a internet!
R es un lenguaje de programación (gramática). Una vez que sabemos hablarlo (escribirlo, vocabulario y gramática), podemos utilizarlo para mandar tareas al ordenador.
R es un lenguaje gratuito y de código abierto.
Podemos instalarlo desde https://www.r-project.org/
Consola y primeras operaciones en R
Paso 1: entra en CRAN y selecciona tu sistema operativo.
Paso 2: para Mac basta con que hacer click en el archivo .pkg, y abrirlo una vez descargado. Para sistemas Windows, debemos clickar en “install R for the first time” y después en “Download R for Windows”. Una vez descargado, abrirlo como cualquier archivo de instalación.
Paso 3: abrir el ejecutable de instalación.
Para comprobar que se ha instalado correctamente, tras abrir R, deberías ver una pantalla blanca similar a esta.
Esa «pantalla blanca» se llama consola y podemos hacer un primer uso de ella como una calculadora.
Para comprobar que se ha instalado correctamente, tras abrir R, deberías ver una pantalla blanca similar a esta.
Esa «pantalla blanca» se llama [consola] y podemos hacer un primer uso de ella como una calculadora.
Mi segundo objeto: definiremos otra variable llamada b y le asignaremos el valor 2
Para comprobar que se ha instalado correctamente, tras abrir R, deberías ver una pantalla blanca similar a esta.
Esa «pantalla blanca» se llama [consola] y podemos hacer un primer uso de ella como una calculadora.
Mi primera operación con objetos: haremos la suma a + b y nos devolverá su resultado
RStudio es un entorno de trabajo mucho más amigable y práctico (Word). IDE: entorno integrado de desarrollo.
Es la aplicación más utilizada para escribir el código en el lenguaje R.
RStudio es al código R como el Word a el texto.
Podemos descargarlo desde la web de RStudio (ahora Posit)
Paso 1: entra la web oficial de RStudio y selecciona la descarga gratuita.
Paso 2: selecciona el ejecutable que te aparezca acorde a tu sistema operativo.
Paso 3: tras descargar el ejecutable, hay que abrirlo como otro cualquier otro y dejar que termine la instalación.
Note
Posit es la empresa detrás de RStudio, anteriormente llamada RStudio. Desarrolla herramientas en torno al lenguaje R. Recientemente, han desarrollado recientemente un nuevo IDE multilenguaje llamado Positron.
Panel de Consola: ejecutaremos órdenes y se mostrarán los resultados. Repetir ejemplo anterior.
Panel de Entorno: nos muestra los objetos que hemos definido, Historial, Conexiones y Tutorial
Panel multiusos: Archivos (archivos en el actual directorio local), Figuras, Paquetes, Help, Visor y Presentación.
Podéis ver más detalles en el Cheatsheet RStudio IDE oficial.
Un script será el documento en el que programamos, con extensión .R donde escribiremos las órdenes. Para abrir nuestro primero script, haz click en el menú en File < New File < R Script.
Lo tendremos en una ventana adicional en Rstudio.
Tenemos varias opciones para ejecutarlo:
Copiar y pegar en consola.
Seleccionar líneas y Ctrl+Enter.
“Source” o activar “Source on save” a la derecha de guardar: no solo guarda sino que ejecuta el código completo.
Ejecuta tu primer script: crea un script de cero, programa lo indicado debajo y ejecútalo
📝 Añade debajo otra línea para definir una variable b con el valor 5. Tras ello múltiplica ambas variables
📝 Modifica el código inferior para definir dos variables c y d, con valores 3 y -1. Tras ello divide las variables.
📝 Asigna un valor positivo a x y calcula su raíz cuadrada; asigna otro negativo y y calcula su valor absoluto con la función abs().
Una de las características interesantes de R es la capacidad de definir objetos o variables. Lo usaré indistíntamente.
Crear una variable implica asignarle un nombre a un valor que nos permitirá usarlo como referencia más adelante.
Una variable/objeto puede ser un número, un texto, una base de datos, un modelo…
En R se usa la flecha para asignar a un objeto un nombre:
En la mayoría de ocasiones el operador de asignar y el igual son equivalentes. Excepto: - El igual solo se puede usar para definir los argumentos de una función - La flecha de asignación se puede usar en ambas direcciones.
| Operación | Símbolo / Función | Ejemplo en R | Resultado |
|---|---|---|---|
| Suma | + |
3 + 5 |
8 |
| Resta | - |
10 - 4 |
6 |
| Multiplicación | * |
2 * 6 |
12 |
| División | / |
15 / 3 |
5 |
| Potencia | ^ o ** |
2 ^ 3 |
8 |
| División entera | %/% |
7 %/% 3 |
2 |
| Módulo (resto) | %% |
7 %% 3 |
1 |
| Raíz cuadrada | sqrt() |
sqrt(16) |
4 |
| Valor absoluto | abs() |
abs(-9) |
9 |
| Operación | Símbolo / Función | Ejemplo en R | Resultado |
|---|---|---|---|
| Logaritmo natural | log() |
log(2.71828) |
1 |
| Logaritmo base 10 | log10() |
log10(100) |
2 |
| Exponencial | exp() |
exp(1) |
2.71828 |
| Redondear | round(x, n) |
round(3.1416, 2) |
3.14 |
| Entero inferior | floor() |
floor(4.9) |
4 |
| Entero superior | ceiling() |
ceiling(4.1) |
5 |
| Suma de un vector | sum() |
sum(c(1,2,3)) |
6 |
| Promedio | mean() |
mean(c(1,2,3)) |
2 |
| Máximo | max() |
max(c(1,5,3)) |
5 |
| Mínimo | min() |
min(c(1,5,3)) |
1 |
Programa los siguientes estadísticos:
help es muy útil para consultar dudas de funciones de las que conocemos su nombre a priori.R incorpora una serie de funciones base por defecto (Rbase). Se pueden ver usando getOption("defaultPackages").
Para instalar funciones adicionales recurriremos a los paquetes o librerías que se encuentran en el repositorio oficial CRAN. Es código que ha desarrollado otra persona y que pone gratuitamente a nuestra disposición.
Estos se instalan usando la función siguiente o a través de la pantalla lateral derecha. Ejemplo: SLBDD.
Important
En este curso, se evitará el uso de paquetes adicionales y nos centraremos en Rbase.
Note
A pesar de esto, identificar el directorio donde R instala las librerías puede ser importante. Se puede usar las funciones .libPaths() (vector con las rutas donde R busca e instala las librerías), Sys.getenv("R_LIBS_USER") (directorio personal de librerías del usuario), path.package() (librerías actualmente cargadas y sus rutas).
tydiverseHay librerías o paquetes relativamente famosos dentro de la comunidad de R para Ciencia de Datos.
Algunos ejemplos son el conjunto de paquete de Tidyverse.
Son de gran utilidad para el tratamiento de datos y para visualización .
Important
En principio, todo lo que necesitamos para nuestras asignaturas está en R base.
Para los fines de este curso recomiendo usar la pantalla “Environment/Import Dataset” que nos guiará en la carga de datos y nos dará el código que utiliza para cargarlos.
Unos datos bien estructurados en su formato de origen nos ayudará a que la carga sea más fácil.
Algunos ejemplos:
Important
Identificar el directorio de trabajo es importante para poder cargar los datos y determinar la ruta. Usa las funciones getwd() o mira la consola para saberlo. Para cambiarlo puedes usar la functión setwd() o usar la pestaña de Files.
Lo ideal es escribir el código en un script, archivo .R que podamos ejecutar para obtener los resultados. Es buena opción también trabajar con notebooks de Quarto.
Es recomendable guardar nuestro entorno de trabajo en una imagen o archivo .RData.
Es recomendable iniciar un proyecto para cada trabajo que queramos realizar. Archivo .Rproj.
Objeto/variable: Un objeto es cualquier entidad que vive en el espacio de trabajo de R (puede guardarse). Cuando creas una variable, una función, un vector, un modelo, etc., estás creando un objeto. Todo en R es un objeto.
Estructura: La forma o contenedor del objeto (vector, lista, matriz,…).
Tipo: Qué contiene la estructura o qué es el objeto que contiene (números, caracteres, booleanos,…).
Clase: Cómo se comporta el objeto cuando lo imprimes, lo sumas, etc. Programación orientada a objetos (OOP) de R. Las clases permiten definir métodos específicos para funciones genéricas.
Métodos: funciones diseñadas para trabajar con una clase específica de objeto.
Sobre los nombres de los objetos:
se distingue entre mayúsculas y minúsculas.
Los nombres de objetos tienen que empezar por una letra y no incluir guiones.
Pueden contener letras, números, barra baja, e incluso espacios. Pero la recomendación es que se usen únicamente letras minúsculas y barra bajas para separar palabras.
Son los “átomos” de los datos en R, porque no se pueden dividir en partes más simples dentro del lenguaje.
R tiene seis Tipos atómicos básicos:
| Tipo | Descripción | Ejemplo |
|---|---|---|
logical |
Booleano (TRUE / FALSE) |
TRUE |
integer |
Número entero | 1L |
numeric |
Número real (doble precisión) | 3.14 |
complex |
Número complejo | 1+2i |
character |
Cadena de caracteres | "hola" |
raw |
Datos binarios (bytes) | as.raw(12) |
Note
Importante la función typeof().
NA en REn R, NA significa “Not Available” y representa un valor faltante o ausente.
Es un valor especial, no un tipo atómico.
Se comporta como un marcador de datos perdidos en vectores, data frames y otros objetos.
NA adopta el tipo del objeto que lo contiene.
Cualquier operación con un NA devuelve NA por defecto.
Diferente a NULL (no existe) y NaN (resultado indefinido).
Note
Importante la función is.na().
Programa los siguientes estadísticos con NAs:
Las estructuras organizan los datos:
Vector: unidimensional, homogéneo.
Matriz: 2D, homogénea.
Array: N-dimensional, homogénea.
Lista: 1D, heterogénea.
Data frame y Tibble: lista con vectores del mismo largo. Cada columna tiene el mismo tipo. Tibble es una versión moderna del data frame.
Note
Importante la función class(), str() y is.~.
Unidimensional
Homogéneo: todos los elementos del mismo tipo
Podemos generalos de diferentes formas:
Mezclando tipos atómicos en un vector
Note
Conversión forzada: Character > Numeric > Logical
R indexa los elementos iniciando en 1
Accederemos a los elementos del vector con su posición:
También podemos seleccionar varios elementos:
o eliminar elementos:
También podemos acceder usando un vector lógico:
Vectores con nombres:
Matriz: 2 dimensiones
Array: 3 o más dimensiones
Ambos son homogéneos
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 generar una matriz, usaremos el comando
Accederemos a sus elementos usando la posición de filas y columnas:
Note
Podemos acceder al número de filas y columnas con la función dim(), ncol() y nrow().
Podemos ponerles nombres a las filas y columas y acceder a sus elementos a través de ellos. Usa las funciones colnames() y rownames() para ello.
Un array es una matriz multidimensional.
Se acceden a los elementos de la misma forma que las matrices
Son objetos multidimensionales.
Elementos pueden ser de tipos o estructuras distintas.
Típicamente usada para representar objetos complejos (modelos, resultados, etc).
Podemos acceder a los elementos de la lista usando [i] y [[i]]. La primera devolverá una lista mientras que la segunda devolverá un objeto con la clase original del elemento i.
Nombres de los elementos de la lista:
Acceso con nombre:
Acceso con número índice:
Acceso a listas
📝 Accede a el vector llamado vector y haz su media usando la función mean():
La estructura básica para organizar los datos es un data frame: ficheros de datos con \(n\) observaciones y \(p\) variables.
Un data frame es una es una lista de vectores atómicos (columnas), todos de la misma longitud, estructuradas como una matriz. Las columnas pueden ser de distinto tipo pero todas tienen la misma longitud.
Para crear un data frame con R se usa el comando data.frame().
Crea un data.frame:
📝 Llámalo datos e incluye 3 columnas y dos filas, una de caracteres, otra numérica y otra booleano.
Tibble: es un data frame mejorado a través de la librería .
Mejores impresiones, no convierte strings a factores, etc.
Algunos tipos de datos son clases que extienden tipos básicos:
| Clase | Basado en tipo | Uso principal | Ejemplo |
|---|---|---|---|
factor |
integer |
Variables categóricas | factor(c("A", "B", "A")) |
Date |
double |
Fechas (día-mes-año) | as.Date("2023-01-01") |
POSIXct |
double |
Fechas + horas | as.POSIXct("2023-01-01 10:00") |
POSIXlt |
double |
Fechas + horas como lista | as.POSIXlt("2023-01-01 10:00") |
Útiles para manejar las variables cualitativas.
Es un vector al que se le añade un poco más de información consistente en los distintos valores presentes en el vector, llamados niveles (levels).
Se crean usando el comando factor():
Podemos ordenarlo usando el argumento levels
[1] poco indiferente poco mucho poco
Levels: poco indiferente mucho
y cambiar sus etiquetas con el argumento labels
Las fechas se almacenan internamente como números:
Date → días desde “1970-01-01”.POSIXct → segundos desde “1970-01-01”.Fecha simple:
Fecha + hora:
Funciones útiles:
| Función | Propósito |
|---|---|
Sys.Date() |
Fecha actual |
Sys.time() |
Fecha y hora actual |
difftime() |
Diferencia entre dos fechas |
as.POSIXct() |
Convertir a clase POSIXct |
as.Date() |
Convertir a clase Date |
weekdays() |
Devuelve el día de la semana |
months() |
Devuelve el mes |
quarters() |
Devuelve el cuatrimestre |
which()Vectorización y aritmética de vectores:
¿Qué está haciendo R en los siguientes ejemplos?:
📝 Crea un vector que contengo los números del 1 al 5 y restale un vector de dimensión dos.
El operador |> (“entonces” o “pipe”) encadena secuencialmente acciones.
Lo que aparece a la izquierda de este operador es el primer argumento del comando que aparece a su derecha.
Requiere una versión de R igual o superior a 4.1.0.
Importante
La librería tidyverse carga un operador alternativo o “pipe” %\>% que es muy común. Este está inlcuído en la librería llamada magrittr.
eigen() decomposition
$values
[1] 5.3722813 -0.3722813
$vectors
[,1] [,2]
[1,] -0.5657675 -0.9093767
[2,] -0.8245648 0.4159736
📝 Crea una matriz de 100 filas y 1000 columnas con los números del 1 al 100*1000.
apply()Familia apply
Funciones que repiten operaciones sobre estructuras como vectores, listas, matrices o data frames
Alternativas más compactas y, a veces, más rápidas que los bucles for.
Note
Programación funcional en R: Una función que tiene de argumento una función.
apply| Función | Tipo de objeto | Resultado | Descripción |
|---|---|---|---|
apply() |
Matriz / data.frame | Vector / matriz | Aplica una función por filas o columnas |
lapply() |
Lista o vector | Lista | Aplica una función a cada elemento |
sapply() |
Lista o vector | Vector o matriz | Igual que lapply(), pero simplifica |
vapply() |
Lista o vector | Vector | Más segura (define tipo esperado) |
tapply() |
Vector + factor | Lista o vector | Aplica función por grupos |
mapply() |
Varios vectores | Lista o vector | Versión multivariable de sapply() |
Una función es un conjunto de instrucciones que realiza una tarea específica
y puede recibir argumentos y devolver un resultado.
function(): palabra clave que define una función.
argument1, argument2: Argumentos o variables que recibe.
<code>: Cuerpo de la función, incluye el código que ejecuta.
return(): valor que devuelve (opcional, R devuelve el último valor por defecto).
📝 Crea tu propia función para calcular la media con argumento un vector numérico:
📝 Úsala en con un vector numérico:
¿Preguntas?
Antonio Elías • Curso de R para Estadística