Unidad 1 - Fundamentos de R

Analítica para los negocios · Semana 3 · 06327-ECO

Autor/a

PhD. Eduard F. Martínez-González

1 Cómo estudiar esta semana

La semana pasada aprendiste a pedirle cosas a la IA con prompts profesionales. Esta semana empieza la otra mitad de la historia: aprender a leer y ejecutar el idioma en el que trabaja el analista — el lenguaje R. Durante el resto del semestre la IA te va a proponer código en R constantemente; tu ventaja competitiva no será teclear más rápido, sino entender qué hace ese código, correrlo y verificarlo.

Tu ruta de esta semana (antes de llegar a clase)

  1. 🎬 Ve el video de la semana: un recorrido por la interfaz de RStudio y los conceptos base — está embebido aquí abajo (verlo en YouTube).
  2. 📖 Lee este documento: es la versión escrita y ampliada del video, con una diferencia enorme — el código se ejecuta aquí mismo, en tu navegador.
  3. Presenta el quiz de teoría en Intu.
  4. 💾 Instala R y RStudio en tu computador (instrucciones abajo). En la clase trabajaremos en RStudio de verdad, no en el navegador.

Este documento es interactivo: úsalo como un laboratorio

Los bloques de código de esta página corren R de verdad dentro de tu navegador (una tecnología llamada webR). En cada celda puedes presionar Run Code, editar el código y volver a ejecutarlo. Nada de lo que hagas puede dañar algo: si te enredas, recarga la página y todo vuelve a empezar.

Abajo a la derecha encontrarás un panel flotante 📦 Environment que imita el panel de RStudio: cada vez que ejecutes una celda, verás aparecer allí los objetos que vas creando. Úsalo — entender ese panel es uno de los objetivos de la semana.

Advertencia

Antes de clase: instala R y RStudio (10 minutos, en este orden)

  1. Instala R (el motor): entra a cran.r-project.org, elige tu sistema operativo (Windows / macOS) y descarga la versión más reciente. Instálala con las opciones por defecto.
  2. Instala RStudio Desktop (la cabina): descárgalo gratis de posit.co/download/rstudio-desktop. También con las opciones por defecto.
  3. Verifica: abre RStudio, escribe 2 + 2 en el panel de la izquierda (la consola) y presiona Enter. Si responde [1] 4, estás listo.

El orden importa: RStudio necesita que R ya esté instalado. Si algo falla, llega 10 minutos antes a clase y lo resolvemos — pero inténtalo primero: leer e interpretar un instalador también es una habilidad de analista.

2 Glosario de la semana

Estos son los términos que vas a usar toda la semana (y todo el semestre). Vuelve aquí cada vez que uno se te escape.

🖥️ Consola
El panel donde R ejecuta órdenes y muestra resultados de inmediato. Es la "conversación" con R: tú escribes, R responde. Lo que escribes ahí no queda guardado.
📝 Script
Archivo de texto (extensión .R) donde escribes y guardas tu código. Es la memoria de tu análisis: permite repetirlo, corregirlo y compartirlo.
📦 Objeto
Un nombre que guarda información en la memoria de R (un número, una tabla, un gráfico, un modelo). Se crea con el operador de asignación <-.
🧬 Vector
La estructura más básica de R: una secuencia de elementos del mismo tipo (todos números, o todos textos...). Las columnas de una tabla son vectores.
📊 Data frame
La tabla de datos de R: filas = observaciones, columnas = variables. Cada columna puede ser de un tipo distinto. Es la estructura central de todo el curso.
🕳️ NA
Not Available: dato faltante. Había un espacio para un valor, pero no lo conocemos (ej.: un cliente no reportó su edad). Aparece en casi toda base de datos real.
⚙️ Función
Una orden con nombre que recibe insumos (argumentos, entre paréntesis) y devuelve un resultado: mean(ventas, na.rm = TRUE). En R, casi todo lo que haces es llamar funciones.
🧰 Paquete
Colección de funciones creada por la comunidad para una tarea específica (dplyr manipula datos, ggplot2 grafica). Se instala una vez y se carga en cada sesión.
🗂️ Environment
El "inventario" de la sesión: panel de RStudio que lista todos los objetos que existen en memoria en este momento. Si un objeto no está ahí, R no lo conoce.
🚦 Warning / Error
Las dos alertas de la consola. Warning: algo raro pasó, pero el código corrió (revisa el resultado). Error: el código se detuvo y nada se ejecutó (hay que corregir).

3 R y RStudio: motor y cabina

Primero, una distinción que evita confusiones eternas:

  • R es el lenguaje y el motor de cálculo. Es lo que realmente ejecuta tu código.
  • RStudio es un IDE (Integrated Development Environment): la cabina de mando que hace cómodo trabajar con R. Organiza el espacio en cuatro paneles.

Distribución de paneles en RStudio

3.1 Los cuatro paneles

Superior izquierdo — Source (editor de scripts). Tu cuaderno de trabajo: aquí escribes código que quieres guardar y reutilizar, y lo ejecutas línea a línea con Ctrl + Enter (Windows) o Cmd + Enter (Mac). ¿Por qué escribir aquí y no directo en la consola? Porque un análisis serio se debe poder reproducir, corregir y compartir. El script es la memoria del proceso.

Inferior izquierdo — Console (consola). Donde R “te habla”: muestra resultados, advertencias y errores. Puedes escribir código directamente, pero no se guarda — úsala para probar cosas rápidas.

Superior derecho — Environment / History. El Environment es el inventario de los objetos que existen en la sesión (datos, variables, resultados). History registra los comandos que has ejecutado.

Inferior derecho — Files / Plots / Packages / Help. Navegador de archivos, visor de gráficos, lista de paquetes y documentación de funciones (se abre cuando pides ayuda con ?).

El Environment es tu aliado

Durante todo el curso, la pregunta “¿por qué me sale error?” tendrá muchas veces la misma respuesta: el objeto que intentas usar no existe en el Environment. Si ejecutaste código correctamente, deberías ver los objetos nuevos aparecer en ese panel. Revisarlo debe volverse un reflejo.

3.2 El flujo de trabajo que repetirás mil veces

La rutina de RStudio

  1. Escribo código en el script (Source)
  2. Ejecuto la línea con Ctrl/Cmd + Enter
  3. Reviso la consola: ¿resultado, warning o error?
  4. Verifico el Environment: ¿se creó el objeto que esperaba?

No lo memorices: se volverá automático con la práctica. Pero fíjate desde ya en que los pasos 3 y 4 existen — la mitad de los problemas de los principiantes vienen de ejecutar sin revisar.

4 R como calculadora

Empecemos por lo más simple: pedirle cuentas a R. Ejecuta la celda (botón Run Code) y luego modifícala — es tuya.

Los resultados aparecen pero no se guardan en ningún lado: si quieres reutilizar un valor, tendrás que aprender a crear objetos (dos secciones más abajo).

4.1 Orden de las operaciones

R sigue las reglas matemáticas de siempre: paréntesis → potencias → multiplicación/división → suma/resta.

Regla práctica: ante la duda, usa paréntesis. Es mejor ser explícito que descubrir tarde que R entendió otra cosa. Un ejemplo de negocio: el precio final de un producto de $1.000 con IVA del 19% es 1000 * (1 + 0.19) — sin el paréntesis, el resultado sería otro.

4.2 Comparar valores

R también responde preguntas de sí o no. El resultado es un valor lógico: TRUE o FALSE.

Advertencia

== compara, = asigna

Para preguntar “¿son iguales?” se usan dos signos igual (==). El signo simple (=) hace otra cosa (asignar valores). Confundirlos es, literalmente, el error más común de las primeras semanas — y lo volverás a ver cuando filtremos datos en la semana 4.

Y puedes combinar condiciones con los operadores lógicos & (y: ambas deben cumplirse) y | (o: basta con una):

¿Para qué sirve esto? En la semana 4 estas comparaciones serán filtros de datos reales: “muéstrame solo las ventas con precio > 100 y region == "Norte". Hoy solo necesitas reconocerlas.

5 Tipos de datos

R clasifica cada dato en un tipo. Los tres que usarás a diario:

Numérico — números enteros o decimales: 42, 3.14.

Carácter (texto) — siempre entre comillas: "Cali", "cliente_premium".

Lógico — solo dos valores, en mayúsculas y sin comillas: TRUE, FALSE.

Advertencia

Cuidado con las comillas

100 (sin comillas) es un número: puedes sumarlo y promediarlo. "100" (con comillas) es texto: R no puede hacer matemáticas con él. Este problema aparece muchísimo al importar datos de Excel — una columna de cifras que llega como texto. Pruébalo tú mismo:

5.1 Valores especiales

En bases de datos reales te cruzarás con estos cuatro personajes:

¿NA o NULL? NA es una silla vacía en la mesa: el puesto existe, el invitado no llegó (un cliente sin edad registrada). NULL es que la silla no existe. En la práctica, el protagonista es NA: casi toda base real los tiene, y aprender a manejarlos es parte del oficio (esta misma semana verás el primer truco: na.rm = TRUE).

6 Objetos: guardar para reutilizar

6.1 Todo en R es un objeto

Si calculas 10 + 5, el 15 aparece en consola y muere ahí. Para usarlo después necesitas guardarlo con un nombre: eso es un objeto. Y en R todo puede ser un objeto: un número, una tabla completa, un gráfico, un modelo de machine learning. Esa filosofía te permite tener varias bases de datos abiertas a la vez, cosa que en Excel es un dolor.

6.2 Crear objetos con <-

La estructura es siempre: nombre <- valor_o_resultado. R calcula lo de la derecha, lo guarda con el nombre de la izquierda, y el objeto aparece en el Environment.

¿<- o =? Ambos asignan, pero la convención de la comunidad R (y de este curso) es clara: usa <- para crear objetos y reserva = para los argumentos de las funciones, como en mean(x, na.rm = TRUE). Atajo de teclado para <-: Alt + - (Windows) o Option + - (Mac).

6.3 Reglas para nombrar

Obligatorias: empieza con letra, sin espacios, sin tildes ni guion medio (- se interpreta como resta), y recuerda que R distingue mayúsculas (ventasVentas). Recomendadas: nombres descriptivos en snake_caseprecio_unitario dice más que x, y tu yo del futuro lo agradecerá.

6.4 Las tres lupas: class(), typeof(), str()

Antes de operar con un objeto conviene saber qué es. R tiene tres funciones-lupa:

De las tres, class() y str() serán tus favoritas: str() en particular es la radiografía instantánea de cualquier tabla de datos, como verás más abajo. ¿Cuándo usarlas? Cada vez que importes datos (“¿la columna de ventas llegó como número o como texto?”) y cada vez que un error te haga sospechar que un objeto no es lo que crees.

Lo esencial hasta aquí

  • Lo que no se asigna con <-, se pierde. Objeto = nombre + valor en memoria.
  • El Environment es el inventario: si no está ahí, no existe.
  • class() y str() te dicen qué es un objeto antes de que te sorprenda.

7 La consola te habla: resultado, warning o error

Cuando ejecutas código, R responde de tres maneras posibles. Distinguirlas es la habilidad que separa al que se frustra del que avanza.

7.1 1. Resultado normal

El [1] del resultado indica la posición del primer elemento mostrado (si el resultado fuera largo, verías [1], [13], [25]… al inicio de cada línea).

7.2 2. Warning: corrió, pero revisa

Un warning no detiene la ejecución — es una alerta amarilla: “hice lo que pediste, pero pasó algo raro”.

El warning más importante del semestre tiene que ver con los NA:

Fíjate en el detalle: mean() con un NA devuelve NA sin siquiera avisar. Por eso la regla es: ante un resultado extraño, sospecha primero de los datos faltantes.

7.3 3. Error: se detuvo todo

Un error es la alerta roja: R no pudo continuar y nada de la línea se ejecutó.

Protocolo ante un error (en este orden)

  1. Respira. Los errores son parte del oficio; los analistas expertos ven decenas al día.
  2. Lee el mensaje completo. Casi siempre dice qué pasó (not found = no existe; unused argument = argumento mal escrito; unexpected symbol = error de tipeo).
  3. Revisa la ortografía: mayúsculas, tildes, comillas y paréntesis sin cerrar.
  4. Mira el Environment: ¿el objeto que usas realmente existe y se llama así?
  5. Consulta la ayuda de la función: ?mean.
  6. Y si nada funciona, pregúntale a la IA — pero con la fórmula de la semana pasada: pega el código completo, el mensaje de error completo y pide que te explique la causa antes que la solución. Para eso construiste tu skill Explicador de código R.

7.4 Ponte a prueba: triage de consola

Clasifica cada salida de consola. ¿Es un resultado normal, un warning o un error?

🚦 Triage de consola · ¿normal, warning o error?
Pista: no te fijes solo en el color del mensaje — pregúntate si el código se ejecutó y si el resultado es confiable.

8 Vectores

Un vector es la estructura más simple de R — y la más importante de entender, porque casi todo lo demás (incluidas las columnas de tus futuras tablas) está hecho de vectores.

Tres características de un vector

  • Homogéneo: todos los elementos son del mismo tipo (todos números, o todos textos, o todos lógicos).
  • Una dimensión: es una fila de casillas, no una tabla.
  • Ordenado: cada elemento tiene una posición (1, 2, 3…).

8.1 Crear vectores con c()

La función c() (de combine) une elementos:

Para vectores con patrones, hay atajos:

8.2 Indexación: sacar elementos con [ ]

R cuenta desde 1 (no desde 0, como Python). Los corchetes extraen posiciones:

8.3 Indexación lógica: el superpoder

Dentro de los corchetes también cabe una condición. R devuelve solo los elementos que la cumplen:

Guarda esta idea. “Dame los elementos que cumplen una condición” es exactamente lo que hace filter(), la función estrella de la próxima semana. La sintaxis será más amable, pero la lógica es esta.

También puedes reemplazar valores usando la misma notación:

8.4 Funciones que resumen un vector

8.5 Mini-ejercicio: la semana en números

Lo esencial de vectores

  • c() crea, [posición] extrae, [condición] filtra.
  • R indexa desde 1.
  • sum(condición) cuenta cuántos elementos cumplen la condición — trúquelo estrella.

9 Matrices: la prima ordenada del vector

Antes de llegar a las tablas de verdad, una parada corta. Una matriz es un vector organizado en filas y columnas — dos dimensiones, pero con la misma regla del vector: todos los elementos del mismo tipo.

La indexación usa la lógica [fila, columna] — apréndetela bien porque los data frames la heredan:

¿Y para qué sirven? En este curso, poco de forma directa: como todas sus celdas deben ser del mismo tipo, una matriz no puede guardar una tabla real de negocio (texto + números + lógicos mezclados). Pero por dentro de R aparecen en todas partes — matrices de correlaciones, la matriz de confusión de los modelos de clasificación (semana 11), operaciones de álgebra lineal. Te basta con reconocerlas y saber leer [fila, columna].

10 Data frames: la estrella del curso

Un data frame es LA estructura de análisis de datos: el equivalente a una hoja de Excel, pero programable.

Qué hace especial a un data frame

  • Heterogéneo: cada columna puede ser de un tipo distinto (nombres en texto, ventas en números, estado en lógico). Es lo que la matriz no podía hacer.
  • Rectangular: todas las columnas miden lo mismo. Cada fila es una observación (un cliente, una transacción); cada columna es una variable (edad, monto, región).
  • Por dentro, cada columna es un vector — todo lo que aprendiste arriba aplica.

10.1 Crear e inspeccionar

La radiografía de cualquier tabla — estas cuatro funciones se ejecutan siempre, apenas cargas datos:

Cómo leer str(): la primera línea dice 4 obs. of 4 variables (4 filas, 4 columnas); luego, cada columna con su tipo: $ nombre: chr (texto), $ edad: num (número), $ activo: logi (lógico). Treinta segundos de str() te ahorran media hora de errores.

10.2 Acceder a la información

Con $ extraes una columna completa (que es un vector — y por eso puedes aplicarle todo lo de la sección anterior):

Con [fila, columna] accedes a cualquier pedazo (la lógica que heredamos de las matrices):

Y crear una columna nueva es asignar sobre un nombre que no existe:

10.3 Mini-ejercicio: primer análisis de clientes

Todo el curso pasa por aquí. En la semana 4, dplyr te dará verbos elegantes para hacer esto mismo (filter() en vez de corchetes, mutate() en vez de $ <-), y ggplot2 convertirá estas tablas en gráficos. En las semanas 10-13, los modelos de machine learning se entrenan… con data frames. Si esta sección te quedó clara, tienes la base de todo lo demás.

11 Funciones y el sistema de ayuda

Ya usaste muchas funciones (mean(), str(), c()…). Formalicemos: una función tiene un nombre, recibe argumentos entre paréntesis (separados por comas, a veces con nombre: na.rm = TRUE) y devuelve un resultado.

11.1 ?: la ayuda antes que nadie

¿Qué hace una función? ¿Qué argumentos acepta? La documentación oficial está a un signo de distancia:

En RStudio esto abre el panel Help con una estructura fija: Description (qué hace), Usage (cómo se escribe), Arguments (qué recibe), y la joya de la corona: Examples, código listo para copiar, ejecutar y adaptar.

Cómo leer la ayuda como un profesional

  1. Lee Description: ¿esta función hace lo que necesito?
  2. Salta directo a Examples: copia uno, ejecútalo, modifícalo con tus datos.
  3. Vuelve a Arguments solo cuando necesites ajustar algo puntual.

No memorices funciones. Nadie lo hace — ni los expertos, ni la IA (que también se equivoca con argumentos). Lo que se entrena es el reflejo de consultar: primero ?funcion, y si la duda persiste, tu skill de la semana 2.

12 Paquetes: instalar una vez, cargar siempre

R trae funciones básicas de fábrica (base R), pero su verdadero poder está en los paquetes: colecciones de funciones creadas por la comunidad — hay más de 20.000 en el repositorio oficial (CRAN). En este curso vivirás en dos: dplyr (manipular datos) y ggplot2 (graficar).

La distinción que evita el 90% de los enredos

Acción Comando ¿Cada cuánto? Analogía
Instalar install.packages("dplyr") Una sola vez por computador Comprar el libro y ponerlo en tu estante
Cargar library(dplyr) Cada sesión de R Sacar el libro del estante para leerlo

Si te sale Error: could not find function "filter", el diagnóstico es casi siempre este: el paquete está instalado pero no cargado en la sesión actual.

## Instalar: se corre UNA vez, directo en la consola (nunca dejarlo activo en el script)
install.packages("dplyr")

12.1 El estándar del curso: pacman

El paquete pacman resuelve todo con una sola línea: p_load() carga los paquetes que le pidas y, si alguno no está instalado, lo instala automáticamente.

## Solo la primera vez, en la consola:
install.packages("pacman")

## Y de ahí en adelante, TODOS nuestros scripts empiezan así:
require(pacman)
p_load(dplyr, ggplot2)

Esa pareja de líneas será el encabezado estándar de cada script del semestre: quien abra tu código podrá correrlo sin preguntarse qué le falta instalar.

13 El Environment y tu primer proyecto

13.1 Gestionar el inventario

Todo objeto que creas vive en el Environment hasta que cierres la sesión (o lo borres). Dos funciones para administrarlo:

Filosofía del curso: el script manda, no el Environment

Al cerrar RStudio te preguntará si quieres guardar el workspace (.RData). Responde No, siempre. La versión oficial de tu análisis es el script: si tu código está bien escrito, puedes reconstruir todos los objetos ejecutándolo de arriba a abajo. Depender de objetos “que quedaron de ayer” es la receta del análisis irreproducible.

13.2 RStudio Projects: dónde vive tu trabajo

Queda una última pieza, y es la que ordena todas las demás. Cuando le pides a R leer un archivo (read.csv("ventas.csv")), R lo busca en su directorio de trabajo (working directory) — la carpeta en la que está “parado”. Si el archivo está en otra parte: error.

La solución profesional no es pelear con rutas, sino usar RStudio Projects: al abrir un proyecto (archivo .Rproj), R se para automáticamente en la carpeta correcta, y todas las rutas se escriben relativas a ella.

Así crearemos el proyecto del curso (lo haremos juntos en clase)

  1. En RStudio: File → New Project → New Directory → New Project.
  2. Nombre: intro_ba (sin espacios ni tildes).
  3. Dentro, crearemos esta estructura de carpetas:
intro_ba/
├── intro_ba.Rproj    # doble clic AQUÍ para abrir el proyecto
├── data/             # datos crudos (nunca se modifican a mano)
├── scripts/          # tu código, un script por semana
└── output/           # resultados: tablas y gráficos exportados
  1. Regla de oro de las rutas:
    • read.csv("data/ventas.csv") — relativa al proyecto: funciona en cualquier computador.
    • read.csv("C:/Users/juan/Desktop/parcial/ventas.csv") — absoluta: solo funciona en el tuyo.

¿Por qué tanto énfasis en esto? Porque reproducibilidad es la palabra que une el curso: tu proyecto final, los talleres y cualquier análisis del mundo real deben poder ejecutarse en otra máquina sin retoques. El proyecto que crearemos esta semana será tu casa el resto del semestre.

14 Lo esencial de la semana

Al terminar la teoría (video + este documento), debes poder:

En la aplicación guiada en clase convertiremos todo esto en tu primer script real dentro de RStudio, y en el taller evaluable lo harás por tu cuenta.

15 Preguntas de comprensión

Intenta responder antes de abrir cada respuesta.

1. Un compañero ejecuta mean(ingresos) y obtiene NA, sin warnings ni errores. ¿Qué pasó y cómo lo arregla?

Ver respuesta El vector ingresos contiene al menos un dato faltante (NA), y el promedio de algo desconocido es desconocido — R lo reporta sin alarmas. Se arregla con mean(ingresos, na.rm = TRUE), que remueve los faltantes antes de calcular. Moraleja: un resultado “sin errores” no es automáticamente un resultado correcto.

2. ¿Por qué ventas <- c(100, 200, "300") no da error, pero después mean(ventas) sí?

Ver respuesta Los vectores son homogéneos: al mezclar números con el texto "300", R convierte todo el vector a texto sin protestar ("100", "200", "300"). El error aparece después, cuando mean() intenta promediar textos. Verifícalo con class(ventas). Es el mismo fenómeno de las columnas de Excel que llegan “como texto”.

3. Ejecutas library(ggplot2) y R responde Error in library(ggplot2) : there is no package called 'ggplot2'. ¿Es un problema de carga o de instalación?

Ver respuesta De instalación: el paquete no existe en ese computador (“no hay tal libro en el estante”). Se resuelve una sola vez con install.packages("ggplot2") y luego sí library(ggplot2). El error contrario — could not find function "ggplot" — suele ser de carga: el paquete está instalado pero olvidaste llamarlo en esta sesión.

4. En el data frame clientes, ¿qué diferencia hay entre clientes[3, ] y clientes[, 3]? ¿Y qué devuelve clientes$ventas?

Ver respuesta clientes[3, ] devuelve la fila 3 completa (una observación: un cliente). clientes[, 3] devuelve la columna 3 completa (una variable, para todos los clientes). El orden es siempre [fila, columna]. clientes$ventas devuelve la columna ventas como vector — por eso puedes aplicarle directamente mean(), sum() o cualquier función de vectores.

16 Material adicional

Para profundizar (opcional, pero recomendado):

  • R para Ciencia de Datos — la traducción al español del libro clásico de Hadley Wickham; los capítulos de “Fundamentos” complementan esta semana.
  • Cheatsheet de RStudio — mapa visual de la interfaz, para tener a la mano en clase.
  • Posit Cloud — RStudio corriendo en el navegador, gratis: tu plan B si la instalación local se complica.
  • swirl — un paquete que te enseña R… dentro de R, con ejercicios interactivos en la consola (install.packages("swirl")).