Introducción a R e RStudio

R es un potente lenguaje de programación para análisis de datos, gráficos y, especialmente, análisis estadístico. Está disponible gratuitamente en www.r-project.org con binarios fáciles de instalar para Linux, macOS y Windows. Este Notebook ofrece una introducción a R, diseñada para estudiantes e investigadores. No se requiere experiencia previa, aunque es útil tener cierta familiaridad con lenguajes de scripting como Bash, Matlab o Python.
La mejor opción para programar en R es instalar RStudio o Visual Studio Code. Aquí aprenderemos algunos de los fundamentos de R y cómo cargar y procesar datos.



Una breve introducción

Al comenzar con R (o cualquier lenguaje de programación), aprendemos tres habilidades fundamentales:


Comentarios

Los comentarios son partes de un programa informático que se utilizan para describir un fragmento de código. Podemos crear un comentario usando el símbolo #.
¿Propósito de los comentarios? Legibilidad, ignorar parte del código y pseudocódigo.


# Todo lo que empieza con # es un comentario y no se ejecuta.
# Esto se usa para explicar la función del código.
# o para dejar notas o recordatorios.
# o para deshabilitar una línea de código.
# o para que el código sea más legible u organizado.
                

Variable

Se pueden asignar diferentes tipos de valores, como caracteres, números o valores lógicos, a una variable.


x <- 10 # La forma más común de asignación
y = 20 # También funciona                   
                

En R (y en prácticamente todos los lenguajes de programación), no se permiten espacios en los nombres de variables. Si intenta escribir:
Puedes usar el guion bajo (_), el punto (.) o CamelCase para separar palabras en los nombres de las variables, como esto:


edad del paciente <- 25                  
                

R generará un error porque creerá que intentas usar la variable de edad, llamar a la función "del", acceder al paciente... un completo desastre! Puedes usar el guion bajo (_), el punto (.) o CamelCase para separar palabras en los nombres de las variables, como esto:


edad_del_paciente <- 25
edad.del.paciente <- 25
Edad_del_paciente <- 25
EdadeDelPaciente <- 25                    
                

En otras palabras, siempre que cree una variable, evite los espacios y use caracteres válidos. Tenga en cuenta que, aunque cada ortografía es aceptable, cada una crea una variable diferente.


R lo diferencia TODO

Cuando hablamos o escribimos con otras personas, entendemos pequeños errores, variaciones del lenguaje y faltas de ortografía. R no es así.


En R, "edad", "Edad", "edades" y "Edades" son nombres completamente diferentes. Esto se debe a que el lenguaje distingue entre mayúsculas y minúsculas.


Y cada variable debe ser única dentro del mismo espacio de trabajo; es decir, cada vez que escribo de una forma diferente, creo un nuevo objeto. Esto es importante porque evita confusiones y garantiza que sepa exactamente qué variable está utilizando.
Por lo tanto, cree nombres de variable que tengan sentido, sean fáciles de recordar y lo suficientemente diferentes como para que usted pueda trabajar con ellos.

Reglas para nombrar variables:

¿Qué significa <-?

Esta flecha se usa para asignar un valor a un objeto. Es como decir: "Pon este valor aquí dentro de esta pequeña caja". O: "x ahora vale 10 e y ahora vale 20".


Pero la flecha "<-" es la forma tradicional y más utilizada en la comunidad de R, especialmente en estadística y ciencia de datos. Es como una tradición del lenguaje: muchos dicen que la flecha indica de dónde viene el valor y adónde va.


En el teclado, para asignar un valor a "<-", se escribe "<" y luego "-", y R lo interpreta automáticamente como una asignación.

Datos y tipos de datos

En R, los datos se organizan típicamente en tablas (data frames), similares a hojas de cálculo de Excel. Cada columna representa una variable (edad, nombre, altura, etc.) y cada fila representa una observación (una persona, un animal, un experimento, etc.).
Puede crear datos manualmente:



# Existen varios tipos de datos en R, pero los más comunes son:
# Números
x <- 10.5 # Números decimales

# Entero
y <- 5L # Números enteros

# Texto (los llamamos "strings")
nombre <- "mi nombre es:" # Texto entre comillas (escribe tu nombre)

# Lógico (booleano)
verdadero <- VERDADERO # Verdadero
falso <- FALSO # Falso

# Vectores
edades <- c(25, 30, 35) # Vector de números               
                

                

c() es una función que significa "combinar" o "concatenar" y se utiliza para crear vectores.


Todos los elementos de un vector deben ser del mismo tipo. Si no se usa c(), R no entenderá que se desea crear un vector y generará un error. Al usar c(), R entiende que se están combinando estos valores en un solo objeto, formando un vector.


Siempre que se desee crear un vector con MÚLTIPLES valores, ya sean números, texto o valores lógicos.

Data frame

Un data frame es como una hoja de cálculo de Excel: cada columna es una variable y cada fila es una observación. Puedes importar tus propios datos o generarlo en R.
Para generarlo:


my_dataframe <- data.frame(
  Name = c("Camila", "Matias", "Juan"),
  Age = c(21,33,19),
  Student = c(TRUE, FALSE, TRUE)
)

my_dataframe                    
                

Matriz

Una matriz es una tabla compuesta únicamente por números (o un solo tipo de datos), organizada en filas y columnas, como en matemáticas.


m <- matrix(1:9, nrow = 3, ncol = 3)

m                    
                

Strings

En programación, las cadenas son secuencias de caracteres; es decir, cualquier conjunto de letras, números, símbolos o espacios. Se utilizan para representar texto.


# Finding the length of a string
nchar(my_string1)

# Joining strings together
paste(my_string1, "2023")

#Splitting strings
txt<-("R is the statistical analysis language")
unlist(strsplit(txt, split = " "))                    
                

Vector

Un vector es una estructura básica que almacena una colección de elementos del mismo tipo: pueden ser números, texto (cadenas), valores lógicos (VERDADERO/FALSO), etc. Los vectores pueden realizar operaciones como sumar, filtrar, comparar, etc.


# Vector
my_vector1 <- c(1,2,3)
my_vector2 <- c(4,5,6)
another_vector <- c("Camila", "Matias", "Juan")

class(my_vector1)
my_vector1                   
                

class(another_vector)
another_vector                    
                

# Creating vectors with R functions
my_name <- rep("Alejandra", times = 5)
my_name

my_seq <- rep(c(1,3,5), times = 3)
my_seq

my_seq <- rep(c(1,3,5), each = 3)
my_seq

my_seq <- -10:10
my_seq

my_seq <- seq(from = -10, to = 10, by = 2)
my_seq                    
                

List

Una lista es un "bolsillo" que puede contener cualquier cosa: números, texto, vectores, marcos de datos, ¡incluso funciones!
Imagina una lista de la compra: Jabón, Suavizante, Manzana, Naranja, Galletas, Pan etc...

Observa que los artículos no pertenecen a las mismas categorías (alimentos, productos de limpieza, productos de higiene), pero todos están en la misma lista. Funciona de forma similar en R:


my_list <- list(City = "Salvador", Age = 476, Beaches = c(Barra, Itapuã, Piatã, Ribeira))

my_list                    
                

Factor

Un factor se utiliza para representar variables categóricas, como "sexo", "estado civil" o "respuesta sí/no". En segundo plano, R trata estos valores como niveles numéricos con nombre.


sex <- factor(c("F", "M", "F"))                    
                

R entiende esto como una variable con dos niveles: «F» y «M».

Los factores son esenciales en el análisis estadístico porque tratan las categorías como niveles distintos, no como cualquier texto.

Operations in R

R es un lenguaje creado por matemáticos para resolver problemas estadísticos y matemáticos. Por lo tanto, realizar operaciones en este lenguaje es bastante similar a lo que ya conocemos en las matemáticas tradicionales.


my_result <- 2 + 3

1 - my_result

6 * 4

2 ^ 3

10 / 5

log10(1000)

log2(32)

sqrt(144)                    
                

Vector Operations


my_vector1
my_vector2                    
                

# Finding the length of a vector
length(my_vector1)                    
                

# Math
my_vector1 * my_vector2
my_vector1 + my_vector2
my_vector1 - my_vector2
my_vector1 / my_vector2                    
                

# Indexing is a way to select (include/exclude) particular elements from a variable
my_vector2
my_vector2[1]
my_vector2[-c(1,3)]
my_vector2[2:3]
my_vector2[c(1,3)] # First and third only                    
                

# Create a vector with some random values
some_values <- c(8, 6, 1, 12, 3)

mean(some_values)

median(some_values)

sort(some_values)

# Quartiles  (25% vs 75%)
quantile(some_values, 0.25)
quantile(some_values, 0.75)

# Interquartile range
IQR(some_values)

# Standard deviation
#In R, the standard deviation and the variance are computed as if the data represent a sample (n - 1)
sd(some_values)

# Variance
var(some_values)
                

Packages (o bibliotecas)

Los packages son conjuntos de funciones predefinidas que te ayudan a realizar tareas específicas. Por ejemplo:

  • ggplot2 — para gráficos elegantes
  • dplyr — para manipular datos
  • readr — para leer archivos
  • Antes de usar un paquete, necesitas:
  • 
    # 1. Instalar (solo una vez):
    install.packages("ggplot2")                    
                    
    
    # 2. Cargar (cada vez que lo uses):
    library(ggplot2)                   
                    
    ¿Qué son las funciones?

    Las funciones son comandos predefinidos que hacen algo por ti. Ya has visto algunas arriba. Su estructura es la siguiente:

    
    nombre_función(argumento 1, argumento 2, ...)                    
                    
    
    #Por ejemplo:
    mean(c(1, 2, 3, 4))                    
                    
  • mean es el nombre de la función.
  • c(1, 2, 3, 4) es el argumento (un array de números).
  • Las funciones ahorran tiempo y organizan tus tareas. Hay cientos de ellas en R, e incluso puedes crear las tuyas propias o usar las de otros.
  • ¿Qué son los argumentos de una función?

    Cuando usamos una función en R, necesitamos pasarle la información necesaria para que sepa qué hacer. Esta información se llama argumentos; considéralos como los pasos de un experimento.

    
    round(3.14159, digits = 2)                    
                    

    Trazado de Datos Numéricos

    Existen varias maneras de crear gráficos en R, pero en esta lección nos centraremos en el paquete ggplot2, una herramienta potente y elegante para la visualización de datos. Se basa en la llamada gramática de grafos, que permite construir gráficos de forma estructurada e intuitiva, como si se escribieran frases con sentido.


    La gramática de grafos es un conjunto de reglas que define cómo construir visualizaciones de forma lógica y estandarizada. La gran ventaja es que, al seguir esta gramática, se aprende una estructura única que permite crear diferentes tipos de gráficos, sin tener que memorizar argumentos diferentes para cada uno.


    Este paquete destaca por ofrecer control total sobre el gráfico: tú decides cada elemento: ejes, colores, tipos de visualización, títulos, leyendas… todo se puede añadir y ajustar con capas. Esto hace que tus gráficos sean más personalizados e informativos.


    Los tres componentes principales de la gramática de grafos son:


  • Datos: las observaciones de nuestro conjunto de datos.
  • Estética: Asignaciones de datos a propiedades visuales (como ejes y tamaños de objetos geométricos).
  • Geometrías: Objetos geométricos, como líneas, que representan lo que vemos en el grafo.

  • Recursos útiles:


    PDF de la documentación: https://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf


    Aquí está el enlace al sitio web: https://ggplot2.tidyverse.org/


    Y aquí está el enlace al libro: https://ggplot2-book.org/

    
    # Cargar el paquete tidyverse
    library(tidyverse)                    
                    
    
    # Cargar el conjunto de datos msleep
    data(msleep)
    
    # Verificar la estructura del conjunto de datos msleep
    str(msleep)                    
                    
    
    # Funciones exploratórias básicas
    #nrow: número de líneas
    #ncol: número de columnas
    #head: primeras líneas
    
    nrow(msleep)
    ncol(msleep)
    head(msleep)                   
                    
    
    # ¿Hay valores NA? ¿Cuántos?
    any(is.na(msleep))
    sum(is.na(msleep))                    
                    
    
    # Omite cualquier observación con valores NA
    msleep %>%
      drop_na()
    
    # Igual a hacer:
    #drop_na(msleep)                    
                    
    
    # ¿Existe una relación entre el sueño total y el sueño REM?
    # ¿Cómo podemos comprobarlo?
    # ¿Quizás trazando un gráfico?
    
    plot(msleep$sleep_total, msleep$sleep_rem)                    
                    
    
    # El coeficiente de correlación se puede calcular utilizando las funciones cor()
    cor.test(msleep$sleep_total, msleep$sleep_rem, method = "pearson", use = "complete.obs")                    
                    
    
    # Comparando la media
    t.test(msleep$sleep_total, msleep$sleep_rem)                   
                    

    Aplicación de ggplot2

    
    # Use tidyverse
    msleep %>%
      ggplot(aes(x = sleep_total, y = sleep_rem)) +
      geom_point()                   
                    
    
    # Llamar directamente ggplot2
    ggplot(msleep, aes(x = sleep_total, y = sleep_rem)) +
      geom_point()                   
                    
    
    # Guardar gráfico
    g <- ggplot(msleep, aes(x = sleep_total, y = sleep_rem)) +
      geom_point()
    ggsave(filename = "test.pdf", plot = g)                   
                    
    
    #Otra alternativa
    pdf("test2.pdf")
    g
    dev.off()                    
                    
    
    # Agregar un título personalizado para el eje Y
    msleep %>%
      ggplot(aes(sleep_total, sleep_rem)) + # ¿Argumentos implícitos o explícitos?
      geom_point() +
      xlab("Total sleep time (h)") +
      ylab("REM sleep time (h)")                    
                    
    
    msleep %>%
      ggplot(aes(sleep_total, sleep_rem)) +
      geom_point(color = "red") +  #Visita: color-hex.com para seleccionarlo
      xlab("Total sleep time (h)") +
      ylab("REM sleep time (h)")                    
                    
    
    #¿Cómo podemos colorear los puntos por vore?
    str(msleep)                    
                    
    
    msleep %>%
      ggplot(aes(sleep_total, sleep_rem, color = vore)) +
      geom_point() +
      xlab("Total sleep time (h)") +
      ylab("REM sleep time (h)")                    
                    

    Boxplots

    
    # Base R
    boxplot(sleep_total ~ vore, data = msleep)                    
                    
    
    #ggplot2
    # gemboxplot: trazar como boxplot
    
    msleep %>%
      ggplot(aes(vore, sleep_total)) +
          geom_boxplot()                   
                    
    
    # Filtrando valores NA
    # Rellenar: núcleos basados ​​en categorías (vore)
    
    msleep %>%
      filter(!(is.na(msleep$vore))) %>%
      ggplot(aes(vore, sleep_total, fill = vore)) +
      geom_boxplot()                   
                    
    
    # geom_jitter: agregar puntos individuales
    # Color: núcleos basados ​​en categorías (vore)
    # labs: agregar rótulos aos eixos e legenda
    
    msleep %>%
      filter(!(is.na(msleep$vore))) %>%
      ggplot(aes(vore, sleep_total)) +
      geom_boxplot() +
      geom_jitter(aes(color=vore)) +
      labs(x= "Diet", y = "Total sleep time (h)", color ="Diet type")