R es un lenguaje y entorno de programación libre y gratuito, especializado en análisis estadístico, manejo de datos y gráficos.
RStudio (hoy desarrollado por Posit) es un entorno de desarrollo integrado (IDE): una interfaz amigable que organiza el trabajo con R en ventanas (editor, consola, gráficos, archivos, etc.).
En otras palabras: R es el motor y RStudio es el tablero desde el cual lo manejamos cómodamente.
¿Por qué R en ingeniería? Permite automatizar cálculos, analizar datos de sensores o procesos, hacer control de calidad, simular experimentos y generar reportes reproducibles. Todo el análisis queda escrito en código, de modo que cualquier resultado puede repetirse y auditarse.
Orden importante: se instala primero R y después RStudio (tanto en Windows como en macOS). RStudio necesita que R ya esté en el equipo para funcionar.
Paso 1 — Instalar R (CRAN):
.exe y acepte las opciones por
defecto (Siguiente → Siguiente → Finalizar).Paso 2 — Instalar RStudio Desktop (Posit):
.exe con las opciones por
defecto.Paso 1 — Instalar R (CRAN):
.pkg según el
chip de su Mac:
.pkg y siga el asistente de
instalación.Paso 2 — Instalar RStudio Desktop (Posit):
.dmg para
macOS.Nota macOS: si al abrir aparece una advertencia de seguridad, autorice la app en Ajustes del Sistema → Privacidad y seguridad → Abrir de todos modos. ¿No sabe qué chip tiene su Mac? Menú Apple → Acerca de esta Mac.
Al abrir RStudio verá la pantalla dividida en cuatro paneles. El siguiente esquema resume la función de cada uno:
Las cuatro ventanas de RStudio: Editor/Source, Consola, Environment/History y Files/Plots/Packages/Help.
| Panel | Ubicación típica | ¿Para qué sirve? |
|---|---|---|
| Editor / Source | Superior izquierda | Donde se escribe y guarda el código (scripts
.R, documentos .Rmd). |
| Consola (Console) | Inferior izquierda | Donde R ejecuta las órdenes y muestra los resultados. |
| Environment / History | Superior derecha | Lista los objetos creados (datos, variables) y el historial de comandos. |
| Files / Plots / Packages / Help | Inferior derecha | Explorador de archivos, visor de gráficos, administrador de paquetes y ayuda. |
Crear un script: menú File → New File → R
Script (o Ctrl + Shift + N). Ejecutar una
línea: ubique el cursor en ella y presione
Ctrl + Enter. Crear este tipo de
documento: File → New File → R Markdown…
Consejo: escriba siempre el código en el Editor (no directamente en la consola) y guárdelo. Así su trabajo queda documentado y se puede volver a ejecutar.
R ejecuta operaciones aritméticas directamente. Pruebe estos ejemplos:
## [1] 8
## [1] 6
## [1] 42
## [1] 6.666667
## [1] 1024
## [1] 2
## [1] 3
Respeta la jerarquía de operaciones y permite usar paréntesis:
## [1] 5
## [1] 12
## [1] 2.718282
## [1] 4.60517
## [1] 3
## [1] 3.14
Se asigna un valor a un nombre con el operador
<-:
## [1] 25
# Un vector agrupa varios valores con c()
mediciones <- c(24.8, 25.1, 24.9, 25.3, 24.7, 25.0)
mediciones## [1] 24.8 25.1 24.9 25.3 24.7 25.0
## [1] 24.96667
Mini-aplicación. Si una pieza tiene diámetro nominal de 25 mm y tolerancia ±0.5 mm, podemos verificar rápidamente cuáles mediciones están dentro de especificación:
## [1] TRUE TRUE TRUE TRUE TRUE TRUE
Cada TRUE indica una pieza conforme.
R trae muchas funciones de fábrica (R base), pero su poder se amplía con paquetes creados por la comunidad y alojados en CRAN.
install.packages("readxl") # leer archivos de Excel
install.packages("ggplot2") # gráficos avanzadosRegla de oro: install.packages() una
vez; library() cada vez que abra RStudio y vaya a usar ese
paquete. También puede instalar paquetes desde el panel Packages
→ Install.
Es la carpeta donde R busca y guarda archivos por defecto.
getwd() # muestra el directorio actual
setwd("C:/Users/Victor/Datos") # lo cambia (use / o \\ en Windows)Recomendado: trabaje con Proyectos de RStudio (File → New Project). Cada proyecto fija su propia carpeta de trabajo y mantiene todo ordenado (datos, scripts, resultados).
.R): código. File →
Save o Ctrl + S..Rmd): texto + código +
resultados (como esta guía). Se compila con el botón
Knit.png("histograma.png", width = 800, height = 600) # abre el archivo
hist(mediciones) # dibuja
dev.off() # cierra y guardaR trae datos de práctica. Por ejemplo mtcars:
Para esta guía usaremos un conjunto simulado de
control de calidad en una línea de producción. Se fija una
semilla (set.seed) para que los resultados
sean reproducibles.
set.seed(123)
n <- 120
produccion <- data.frame(
diametro = round(rnorm(n, mean = 25, sd = 0.8), 2), # mm
resistencia = round(rnorm(n, mean = 450, sd = 35), 1), # MPa
temperatura = round(rnorm(n, mean = 70, sd = 5), 1), # °C del proceso
proveedor = factor(sample(c("A","B","C"), n, replace = TRUE, prob = c(.5,.3,.2))),
turno = factor(sample(c("Día","Noche"), n, replace = TRUE)),
estado = factor(sample(c("Conforme","No conforme"), n, replace = TRUE, prob = c(.85,.15)))
)
head(produccion)Guardamos el conjunto como CSV y luego lo volvemos a leer: este es el flujo real cuando los datos vienen de un archivo.
# Guardar en la carpeta de trabajo
write.csv(produccion, "produccion.csv", row.names = FALSE)
# Leer el archivo (como harías con tus propios datos)
datos <- read.csv("produccion.csv")
head(datos)## [1] 120 6
## [1] "diametro" "resistencia" "temperatura" "proveedor" "turno"
## [6] "estado"
## 'data.frame': 120 obs. of 6 variables:
## $ diametro : num 24.6 24.8 26.2 25.1 25.1 ...
## $ resistencia: num 454 417 433 441 514 ...
## $ temperatura: num 66.1 67.5 77.5 64.3 69.1 79.5 69.5 63.2 66.7 72.4 ...
## $ proveedor : chr "A" "B" "B" "C" ...
## $ turno : chr "Noche" "Día" "Noche" "Noche" ...
## $ estado : chr "Conforme" "Conforme" "Conforme" "Conforme" ...
## [1] 25.01267
## [1] 24.965
## [1] 0.5119592
## [1] 0.7155133
## [1] 23.15 26.75
## [1] 45.175
## 0% 25% 50% 75% 100%
## 378.100 424.850 443.350 470.025 563.400
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 378.1 424.9 443.4 449.1 470.0 563.4
Resumen de todo el conjunto a la vez:
## diametro resistencia temperatura proveedor
## Min. :23.15 Min. :378.1 Min. :57.70 Length:120
## 1st Qu.:24.54 1st Qu.:424.9 1st Qu.:67.35 Class :character
## Median :24.96 Median :443.4 Median :70.30 Mode :character
## Mean :25.01 Mean :449.1 Mean :70.43
## 3rd Qu.:25.45 3rd Qu.:470.0 3rd Qu.:74.20
## Max. :26.75 Max. :563.4 Max. :82.90
## turno estado
## Length:120 Length:120
## Class :character Class :character
## Mode :character Mode :character
##
##
##
A menudo interesa comparar grupos (por turno, proveedor, etc.). La
función tapply() aplica un cálculo a cada grupo:
## Día Noche
## 448.5823 449.6121
## A B C
## 0.6980649 0.7579682 0.7170957
Para variables categóricas se usan tablas de frecuencia:
##
## A B C
## 62 37 21
##
## A B C
## 0.5166667 0.3083333 0.1750000
##
## Conforme No conforme
## 91.7 8.3
##
## Conforme No conforme
## A 56 6
## B 34 3
## C 20 1
Muestra la forma de la distribución de una variable continua.
hist(datos$diametro,
main = "Distribución del diámetro de las piezas",
xlab = "Diámetro (mm)", ylab = "Frecuencia",
col = "#2c7fb8", border = "white")Resume mediana, cuartiles y valores atípicos. Es ideal para comparar grupos.
# Boxplot simple
boxplot(datos$resistencia,
main = "Resistencia del material",
ylab = "Resistencia (MPa)", col = "#2e8b57")# Boxplot por grupo: resistencia según turno
boxplot(resistencia ~ turno, data = datos,
main = "Resistencia por turno",
xlab = "Turno", ylab = "Resistencia (MPa)",
col = c("#2c7fb8", "#ffa500"))Muestra la relación entre dos variables continuas.
plot(datos$temperatura, datos$resistencia,
main = "Resistencia vs. temperatura del proceso",
xlab = "Temperatura (°C)", ylab = "Resistencia (MPa)",
pch = 19, col = "#2c7fb8")
# Línea de tendencia (regresión lineal)
abline(lm(resistencia ~ temperatura, data = datos), col = "red", lwd = 2)¿Qué gráfico usar? Histograma → forma de una variable continua. Boxplot → comparar grupos y detectar atípicos. Dispersión → relación entre dos variables continuas.
Para variables categóricas se grafican sus frecuencias.
barplot(table(datos$proveedor),
main = "Número de piezas por proveedor",
xlab = "Proveedor", ylab = "Frecuencia",
col = c("#2c7fb8", "#2e8b57", "#ffa500"))Barras agrupadas para dos variables (estado por proveedor):
barplot(table(datos$estado, datos$proveedor),
beside = TRUE,
main = "Estado de la pieza según proveedor",
xlab = "Proveedor", ylab = "Frecuencia",
col = c("#2e8b57", "#d7301f"),
legend.text = TRUE,
args.legend = list(x = "topright", bty = "n"))Útil para mostrar la composición porcentual.
tb <- table(datos$proveedor)
porc <- round(100 * tb / sum(tb), 1)
etiquetas <- paste0(names(tb), " (", porc, "%)")
pie(tb, labels = etiquetas,
main = "Participación por proveedor",
col = c("#2c7fb8", "#2e8b57", "#ffa500"))Recomendación. El diagrama de barras suele leerse mejor que el circular cuando hay muchas categorías o valores parecidos; reserve el circular para pocas categorías y cuando interese resaltar proporciones.
# para recordar qué hace cada
línea.set.seed) cuando
simule datos, para que los resultados sean reproducibles.?nombre (por
ejemplo, ?hist).