Flujos de trabajo y análisis

Luis D. Verde Arregoitia

Temas de este bloque

  • Organización de proyectos y archivos
  • Buenas prácticas para nombrar archivos y objetos
  • Trabajando con rutas
  • Estructuras y organización de datos Objetos
  • Repaso
  • Exploración rápida de datos

¿Qué es ?

✍️Software

¿Dialecto de S?
¿Paquete estadístico?
¿RStudio?
¿Lenguaje de programación?
¿Dispositivo gráfico?

?

✍️🧑‍🎓Ventajas

✍️🧑‍🎓Desventajas

Este curso

  • Instalaciones locales
  • RStudio
  • Dialecto tidyverse
  • Enfoque en código
  • Pipes

Mi sistema

  • R v4.3.0

  • RStudio 2023.05.0-daily+304 “Mountain Hydrangea”

  • Sin personalizaciones visuales

  • Linux Mint 20.3

no es RStudio

IDE - Entorno de desarrollo integrado

Herramientas para facilitar el uso de un lenguaje de programación

  • Editor de texto que ‘reconoce’ la sintaxis de un lenguaje

  • Atajos y herramientas para administrar y ejecutar código

Otras opciones

  • RStudio
  • Emacs + ESS (https://ess.r-project.org)
  • vim + Nvim-R: (Turn Vim Into an IDE for R)
  • Visual Studio + RTVS
  • Cualquier editor de texto (enviando líneas o selecciones a una instancia de R)

R. Geert van den Berg [SPSS Tutorials]

Scripts y código fuente

Reproducir y modificar pasos

Encontrar errores

Documentar el proceso

Examinar código ajeno

📦 Paquetes



Al instalar R instalamos:

base: las funciones fundamentales de R

list()
log()
cat() rm() etc…

📦 Paquetes

Otros componentes de R-base:
utils, stats, datasets, graphics, grDevices, grid, methods, tools, parallel, compiler, splines, tcltk, stats4

Paquetes ‘recomendados’ (se instalan con R pero no se cargan automáticamente)

boot, class, cluster, codetools, foreign, KernSmooth, lattice, mgcv, nlme, rpart, survival, MASS, spatial, nnet, Matrix

📦 Paquetes Adicionales

  • >19,000 en CRAN (The Comprehensive R Archive Network)

  • muchos más en GitHub, GitLab, Bitbucket, Bioconductor, etc.

Se instalan desde R con:

install.packages() para paquetes de CRAN
📦 remotes para todos los demás repositorios

Visita guiada por R y RStudio

  • Ejecutar R

  • Ejecutar RStudio

  • Instalar algunos paquetes para hoy:

install.packages("ggplot2")
install.packages("dplyr")
install.packages("readr")
install.packages("tidyr")
install.packages("fs")
install.packages("here")

Sistemas de archivos

Monica Chin (2021)
File not Found

Jody Macgregor (2021)
PC Gamer

Directorios, rutas y nombres

Guardar archivos en ubicaciones específicas, con nombres intencionales y útiles

  • Nombres cortos e informativos

  • Fáciles de ordenar y que cooperen con búsquedas parciales

  • Atención con caracteres especiales y espacios

Nombres

OK

max_temp


prec_min_usd
temp_mensual

No tanto

temperatura_maximaC2014
max
temp
'Precio Mínimo ($) USD'
'Temperatura/Mes (°F)'

Jenny Bryan (2015)
Naming Things

Nombres

OK

01_factura-marzo2023.pdf
02_factura-julio2023.pdf
ms_helechos_20210412.docx

No tanto

descarga5462.pdf
juliocompraluis.pdf
borrador.docx

En R los nombres válidos solo pueden llevar letras, números, puntos, y guiones; no pueden comenzar con números

Esquemas de mayúsculas/minúsculas y espacios


camelCase - la segunda palabra en adelante con mayúscula, sin espacios

snake_case - solo minúsculas, guión bajo entre palabras

slug-case - solo minúsculas, guión entre palabras



Title Case - Mayúsculas excepto en artículos, con espacios

Sentence case - Primera palabra con mayúsculas, con espacios

Podemos transformar cadenas de texto de un esquema a otro con el paquete 📦snakecase

Organización de proyectos

Proyecto

Directorio con todo los archivos relevantes para algún trabajo

Separar:

📁 Datos (o código para cargarlos desde fuentes remotas)
📁 Scripts de análisis y/o visualización
📁 Salidas (figuras, informes, datos intermedios, etc.)


Jenny Bryan (2017)
Project-oriented workflow

Maëlle Salmon (2021)
Draw me a project

Proyectos en RStudio

  • Instancia de R dedicada

  • Navegador apuntando al directorio del proyecto

    • botón para regresar al dir. del proyecto
  • Dir. de proyecto establecido como Dir. de Trabajo

    • rutas relativas al Dir. de Proyecto

Ejercicio

Crear un proyecto para el curso en RStudio


  • en alguna ubicación fácil de encontrar (ej. Escritorio)
  • “curso-R-biodiversidad” como nombre

Los proyectos en OneDrive pueden no funcionar correctamente

📦 fs

Trabajando con el sistema de archivos (cualquier plataforma)

fs siempre trabaja con rutas ordenadas

  • /’ para delimitar carpetas
  • Sin ‘/’ dobles o extras

Crear directorios
Mover archivos
Copiar archivos
Cambiar nombres

Ejercicio

  • Crear nuevas carpetas en el directorio del proyecto
    • datos
    • salida
    • R

Los paquetes ya instalados se cargan con la función library()

library(fs)

Crear nuevas carpetas en el directorio del proyecto

dir_create("R")
dir_create("datos")
dir_create("salida")
dir_ls()

Todo esto también se puede hacer desde el navegador de RStudio, la terminal, o el explorador del sistema operativo

Guardar la fuente y no el entorno

  • Exportar figuras y resultados a archivos

  • Evitar rm(list = ls()).

  • ‘Hoja en blanco’ & reiniciar R seguido

Jenny Bryan & Jim Hester (2020)
What they forgot to teach you about R
Jenny Bryan (2018)
Zen And The aRt Of Workflow Maintenance

Hoja en blanco (blank slate)

No se guarda el espacio de trabajo a un archivo .Rdata

No se carga el espacio de trabajo desde un archivo .Rdata al arrancar R

Reiniciar R

Ctrl+Shift+F10

(Windows y Linux)

Command+Shift+F10

(Mac)

📦 here y rutas relativas

F:\PC de Luis\ruta\que\solo\tengo\mi-proyecto\analisis\script1.R

Trabajemos en relación a la raíz del proyecto con la función here()

  • resuelve cuál es la raíz del proyecto
  • construye rutas portátiles
  • genera rutas absolutas (comienzan con /, C:\ o \\)

Si la raíz del proyecto es mi-proyecto

here("analisis","script1.R")

construye:

F:\PC de Luis\ruta\que\solo\tengo\mi-proyecto\analisis\script1.R


here() no cambia el directorio de trabajo, solo construye rutas

here() resuelve cuál es la raíz de un proyecto (i.e. dónde está el archivo .Rproj?) y las rutas son relativas a ésto


How to use the here package (2018)

Importando archivos (tablas)

  • Con el botón “Import Dataset
  • Con alguna función read

readr y readxl

Paquetes adicionales para importar datos rectangulares desde archivos de texto y hojas de cálculo

  • Menos errores al importar

  • Mayor flexibilidad al leer archivos

  • Lectura más rápida

  • Funciones adicionales para limpiar los valores en las columnas

Ejercicio

Importar una tabla a R desde un archivo

Estructuras de datos

Principios de programación en R


Todo lo que existe es un objeto

Todo lo que ocurre lo hace una función
(Las funciones son objetos)

Las funciones (generalmente) viven en paquetes

Objetos

  • Tablas con filas y columnas

  • Modelos

  • Listas

  • Gráficos

Todos los objetos tienen clases y atributos y hay distintas formas de crearlos

Vectores

Listas

Tablas

Vectores

Números

c(1,2,3,4)
[1] 1 2 3 4


c(22.1,0.006,4.1)
[1] 22.100  0.006  4.100

Vectores

Caracteres

c("perro","gato","rata","B")
[1] "perro" "gato"  "rata"  "B"    

Vectores

Lógicos (verdadero/falso)

c(TRUE,FALSE,FALSE,FALSE,TRUE)
[1]  TRUE FALSE FALSE FALSE  TRUE

Creando objetos

x <- c(1, 2, 3)

Función c() para juntar elementos en un vector

x <- c(1,2,3)
y <- c("a","G","h")
x
[1] 1 2 3
y
[1] "a" "G" "h"

Los objetos tienen clases

class(x)
[1] "numeric"
class(y)
[1] "character"

Los vectores solo pueden tener objetos de la misma clase

c(1,"a",2)
[1] "1" "a" "2"

Al combinar caracteres y números hay conversión automática

Vectores numéricos

Factores

  • Representan datos categóricos

  • Las etiquetas de cada valor se conocen como niveles, que pueden o no llevar un orden específico

  • Crear con factor()

Factores

factor(c("perro","gato","ave","ninguno",
         "perro","ninguno","perro","perro",
         "gato","ave","perro"))
 [1] perro   gato    ave     ninguno perro   ninguno perro   perro   gato   
[10] ave     perro  
Levels: ave gato ninguno perro

Dos o más vectores del mismo largo…


¡Data frame!

  • Objeto tabular con filas y columnas

  • Puede almacenar objetos de distintas clases en las columnas

  • Nombres para cada columna

Data frames

Se crean importando un archivo tabular o con data.frame()

mi_tabla <- 
data.frame(id=c("rana","pez","nutria","gusano"),
           ind_g=c(12,15,13,10),
           listo=c(TRUE,TRUE,FALSE,TRUE))
  • cada vector es una columna
  • nombres de columnas sin comillas
  • mismo largo para todos los vectores

mi_tabla
      id ind_g listo
1   rana    12  TRUE
2    pez    15  TRUE
3 nutria    13 FALSE
4 gusano    10  TRUE

¿Dudas?