Examen UD7 (medio)
Duración estimada: 45 minutos. Lee con atención y marca la(s) respuesta(s) correcta(s). Algunas preguntas pueden tener más de una respuesta válida.
Instrucciones
- Responde marcando la opción correcta (a, b, c, d). Puede haber más de una correcta: marca todas las que correspondan.
- En las preguntas de código se pide elegir la(s) opción(es) correcta(s); debajo de cada pregunta se incluye la explicación para estudiar.
Pregunta 7
Dado estudiantes <- data.frame(nombre = c("Ana", "Bruno"), edad = c(20, 21)), ¿cómo accedemos a la columna "edad"?
Pregunta 8
¿Qué función muestra un resumen estadístico completo (mínimo, cuartiles, media, máximo)?
Pregunta 17
Dado estudiantes <- data.frame(nombre = c("Ana", "Bruno", "Carlos"), nota = c(8.5, 7.2, 9.1)), ¿qué devuelve estudiantes[estudiantes$nota >= 8, ]?
Los resultados del cuestionario se guardan en el almacenamiento local de tu navegador y persistirán entre sesiones.
Progreso del cuestionario
0 / 0 preguntas respondidas (0%)
0 correctas
Soluciones desarrolladas
Solución pregunta 1 — Diferencia R vs RStudio
Respuesta correcta: b) R es el lenguaje/intérprete y RStudio es la interfaz gráfica
Explicación completa:
R y RStudio son dos cosas diferentes pero complementarias:
-
R: Es el lenguaje de programación y el intérprete que ejecuta el código. Fue creado específicamente para estadística y análisis de datos. Es software libre y gratuito.
-
RStudio: Es un IDE (Integrated Development Environment) o entorno de desarrollo integrado. Es una interfaz gráfica que hace más fácil trabajar con R, proporcionando:
- Editor de código con colores y autocompletado
- Visualizador de variables en memoria
- Panel de gráficos
- Gestor de archivos
- Sistema de ayuda integrado
Analogía práctica: Es como la diferencia entre el motor de un coche (R) y el coche completo con su panel de control, volante y pantallas (RStudio). Puedes usar R directamente desde la terminal, pero RStudio hace la experiencia mucho más cómoda y productiva.
Instalación: Siempre debes instalar R primero y luego RStudio, ya que RStudio necesita encontrar R instalado para funcionar.
Solución pregunta 2 — Operador de asignación
Respuesta correcta: b) <- (aunque = también funciona)
Explicación completa:
En R, el operador preferido para asignación es <-:
Aunque también funciona el operador =:
¿Por qué <- es preferido?
- Tradición: Es la convención histórica en R
- Claridad: Distingue claramente asignación de otros usos de
= - Contexto:
=se usa dentro de funciones para pasar argumentos:
Operadores que NO son asignación:
==: Comparación de igualdad:=: No existe en R base->: Asignación inversa (poco común)
Solución pregunta 3 — Paneles de RStudio
Respuesta correcta: c) 4 paneles
Explicación completa:
RStudio organiza su interfaz en 4 paneles principales:
┌──────────────────────────────────────────┐
│ [1] Editor de Scripts │
│ (escribes y guardas tu código aquí) │
├──────────┬───────────────────────────────┤
│ │ [4] Gráficos / Archivos / │
│ [2] │ Paquetes / Ayuda │
│ Entorno/ │ │
│ Historial│ │
│ │ │
└──────────┴───────────────────────────────┘
│ [3] Consola (aquí ves los resultados) │
└──────────────────────────────────────────┘
Detalle de cada panel:
- Editor de Scripts (arriba izquierda): Donde escribes y guardas archivos
.R - Entorno/Historial (arriba derecha):
- Environment: Variables en memoria
- History: Comandos ejecutados
- Consola (abajo izquierda): Donde ejecutas comandos y ves resultados
- Panel múltiple (abajo derecha):
- Files: Explorador de archivos
- Plots: Gráficos generados
- Packages: Paquetes instalados
- Help: Documentación
Solución pregunta 4 — Crear vectores
Respuesta correcta: b) c()
Explicación completa:
La función c() (combine) es la forma estándar de crear vectores en R:
# Vector de números
notas <- c(8.5, 7.2, 9.1, 8.9)
# Vector de texto
nombres <- c("Ana", "Bruno", "Carlos")
# Vector lógico
aprobados <- c(TRUE, TRUE, FALSE, TRUE)
Otras formas de crear vectores:
# Secuencias
numeros <- 1:10 # 1, 2, 3, ..., 10
pares <- seq(0, 20, by=2) # 0, 2, 4, ..., 20
# Repeticiones
unos <- rep(1, 5) # 1, 1, 1, 1, 1
patron <- rep(c(1,2), 3) # 1, 2, 1, 2, 1, 2
¿Por qué no las otras opciones?
vector(): Crea un vector vacío de un tipo específico, pero no es la forma comúnv(): No existe en Rarray(): Crea arrays multidimensionales, no vectores simples
Solución pregunta 5 — Función length()
Respuesta correcta: b) [1] 5
Explicación completa:
Dado el código:
La función length() devuelve el número de elementos del vector, no sus valores ni su suma.
Paso a paso:
xcontiene 5 elementos: 10, 20, 30, 40, 50length(x)cuenta cuántos elementos hay- Resultado:
[1] 5
Otras funciones útiles:
sum(x) # [1] 150 (suma de elementos)
mean(x) # [1] 30 (media)
min(x) # [1] 10 (mínimo)
max(x) # [1] 50 (máximo)
El formato [1] en la salida:
El [1] que aparece al principio de la salida indica que es el primer (y único) elemento de la respuesta. Si hubiera más resultados, verías [2], [3], etc.
Solución pregunta 6 — Calcular media
Respuesta correcta: c) [1] 5
Explicación completa:
Dado el código:
Cálculo paso a paso:
La media aritmética es la suma de todos los valores dividida por el número de valores:
Verificación en R:
valores <- c(2, 4, 6, 8)
# Forma automática
mean(valores) # [1] 5
# Forma manual
suma <- sum(valores) # 20
cantidad <- length(valores) # 4
media_manual <- suma / cantidad # 5
Propiedades de la media:
- Es sensible a valores extremos (outliers)
- Coincide con la mediana en distribuciones simétricas
- Para estos datos (2, 4, 6, 8), la secuencia es aritmética con diferencia 2
Solución pregunta 7 — Acceder a columnas de data frame
Respuesta correcta: a, b, c) Las tres primeras formas son correctas
Explicación completa:
Dado el data frame:
Formas válidas de acceder a la columna "edad":
1. Usando $ (más común):
2. Por nombre entre corchetes:
3. Por índice numérico:
Forma incorrecta:
Comparación de métodos:
| Método | Ventaja | Cuándo usar |
|---|---|---|
$ |
Más legible y conciso | Acceso directo a columna |
[, "nombre"] |
Programación con nombres | Cuando el nombre varía |
[, índice] |
Útil en bucles | Iteración numérica |
Solución pregunta 8 — Función summary()
Respuesta correcta: c) summary()
Explicación completa:
La función summary() proporciona un resumen estadístico completo:
Salida:
Qué muestra summary():
- Min.: Valor mínimo (7.50)
- 1st Qu.: Primer cuartil (25% de los datos están por debajo)
- Median: Mediana (valor central)
- Mean: Media aritmética
- 3rd Qu.: Tercer cuartil (75% de los datos están por debajo)
- Max.: Valor máximo (9.10)
Comparación con otras funciones:
mean(notas) # Solo la media: [1] 8.17
sd(notas) # Solo desviación estándar
var(notas) # Solo varianza
Para data frames:
Solución pregunta 9 — Indexación de vectores
Respuesta correcta: b) [1] 8.2
Explicación completa:
Dado el código:
Indexación en R:
R usa indexación base 1 (no como Python que empieza en 0):
Por lo tanto, notas[2] accede al segundo elemento → 8.2
Ejemplos adicionales:
notas[1] # [1] 7.5 (primer elemento)
notas[4] # [1] 7.8 (cuarto elemento)
notas[1:3] # [1] 7.5 8.2 9.1 (primeros tres)
notas[-2] # [1] 7.5 9.1 7.8 (todos excepto el segundo)
notas[c(1,3)] # [1] 7.5 9.1 (primero y tercero)
Diferencia con otros lenguajes:
| Lenguaje | Índice inicial | notas[2] devuelve |
|---|---|---|
| R | 1 | 8.2 (segundo) |
| Python | 0 | 9.1 (tercero) |
| MATLAB | 1 | 8.2 (segundo) |
Solución pregunta 10 — Instalar paquetes
Respuesta correcta: b) install.packages("paquete")
Explicación completa:
En R, los paquetes se gestionan en dos pasos:
1. Instalación (una sola vez):
2. Carga en cada sesión:
Diferencia entre funciones:
| Función | Propósito | Frecuencia |
|---|---|---|
install.packages("pkg") |
Descarga e instala el paquete | Una vez |
library(pkg) |
Carga el paquete en la sesión actual | Cada sesión |
require(pkg) |
Similar a library, con advertencia | Ocasional |
Ejemplo completo:
# Primera vez (instalar)
install.packages("readxl")
# Cada vez que inicias R (cargar)
library(readxl)
# Ahora puedes usar funciones del paquete
datos <- read_excel("archivo.xlsx")
Verificar paquetes instalados:
Solución pregunta 11 — Operaciones vectorizadas
Respuesta correcta: c) [1] 15 25 35
Explicación completa:
Dado el código:
R aplica operaciones con escalares elemento por elemento (operación vectorizada):
Más ejemplos de vectorización:
# Multiplicación
c(10, 20, 30) * 2
# [1] 20 40 60
# División
c(10, 20, 30) / 10
# [1] 1 2 3
# Potencia
c(2, 3, 4) ^ 2
# [1] 4 9 16
# Raíz cuadrada
sqrt(c(4, 9, 16))
# [1] 2 3 4
Operaciones entre vectores del mismo tamaño:
Ventaja: No necesitas bucles; R lo hace automáticamente.
Solución pregunta 12 — Función dim()
Respuesta correcta: b) [1] 5 2
Explicación completa:
Dado el código:
Estructura del data frame:
La función dim() devuelve las dimensiones en formato [filas, columnas]:
- Filas: 5 (observaciones del 1 al 5)
- Columnas: 2 (variables x e y)
- Resultado:
[1] 5 2
Funciones relacionadas:
nrow(datos) # [1] 5 (número de filas)
ncol(datos) # [1] 2 (número de columnas)
length(datos) # [1] 2 (número de columnas, igual que ncol)
dim(datos)[1] # [1] 5 (extraer solo filas)
dim(datos)[2] # [1] 2 (extraer solo columnas)
Uso práctico:
Solución pregunta 13 — Operador AND lógico
Respuesta correcta: b) &
Explicación completa:
En R, el operador lógico AND se representa con &:
# Comparaciones simples
5 > 3 & 10 < 20 # TRUE (ambas son verdaderas)
5 > 3 & 10 > 20 # FALSE (la segunda es falsa)
Operadores lógicos en R:
| Operador | Significado | Ejemplo | Resultado |
|---|---|---|---|
& |
AND | TRUE & TRUE |
TRUE |
\| |
OR | TRUE \| FALSE |
TRUE |
! |
NOT | !TRUE |
FALSE |
&& |
AND escalar | 5 > 3 && 10 < 20 |
TRUE |
\|\| |
OR escalar | 5 > 3 \|\| 10 > 20 |
TRUE |
Diferencia & vs &&:
# & es vectorizado (compara elemento por elemento)
c(TRUE, FALSE) & c(TRUE, TRUE)
# [1] TRUE FALSE
# && solo evalúa el primer elemento
c(TRUE, FALSE) && c(TRUE, TRUE)
# [1] TRUE
Ejemplo práctico con filtrado:
Solución pregunta 14 — Filtrado de vectores
Respuesta correcta: c) [1] 15 20
Explicación completa:
Dado el código:
Paso a paso:
-
Condición:
x > 10evalúa cada elemento -
Filtrado: Se seleccionan solo los elementos donde la condición es TRUE
-
Resultado final:
[1] 15 20
Más ejemplos de filtrado:
x <- c(5, 10, 15, 20)
# Valores >= 10
x[x >= 10] # [1] 10 15 20
# Valores entre 8 y 18
x[x > 8 & x < 18] # [1] 10 15
# Valores menores que 10 O mayores que 18
x[x < 10 | x > 18] # [1] 5 20
# Valores diferentes de 10
x[x != 10] # [1] 5 15 20
Contar elementos que cumplen:
Solución pregunta 15 — Leer archivos CSV
Respuesta correcta: a) read.csv()
Explicación completa:
La función read.csv() es la estándar en R para leer archivos CSV:
Uso básico:
Parámetros comunes:
# CSV con punto y coma (formato europeo)
datos <- read.csv("archivo.csv", sep=";")
# CSV sin encabezados
datos <- read.csv("archivo.csv", header=FALSE)
# Especificar decimales con coma
datos <- read.csv("archivo.csv", sep=";", dec=",")
# Ignorar comillas
datos <- read.csv("archivo.csv", quote="")
Otras funciones para importar datos:
| Función | Archivo | Paquete necesario |
|---|---|---|
read.csv() |
CSV | base (incluido) |
read.table() |
Tablas genéricas | base |
read_excel() |
Excel (.xlsx) | readxl |
read.spss() |
SPSS | foreign |
Ejemplo completo:
Solución pregunta 16 — Secuencias con :
Respuesta correcta: c) [1] 1 2 3 4 5
Explicación completa:
El operador : crea una secuencia de enteros consecutivos:
Más ejemplos:
# Secuencia del 1 al 10
1:10
# [1] 1 2 3 4 5 6 7 8 9 10
# Secuencia del 5 al 10
5:10
# [1] 5 6 7 8 9 10
# Secuencia descendente
5:1
# [1] 5 4 3 2 1
# Secuencia negativa
-3:2
# [1] -3 -2 -1 0 1 2
Uso práctico:
# Crear índices
indices <- 1:100
# Seleccionar primeras 5 filas
datos[1:5, ]
# Crear columnas en data frame
df <- data.frame(id = 1:10, valor = rnorm(10))
Diferencia con seq():
Solución pregunta 17 — Filtrado de data frames
Respuesta correcta: b) Las filas de Ana y Carlos
Explicación completa:
Dado el código:
estudiantes <- data.frame(
nombre = c("Ana", "Bruno", "Carlos"),
nota = c(8.5, 7.2, 9.1)
)
estudiantes[estudiantes$nota >= 8, ]
Paso a paso:
-
Condición:
estudiantes$nota >= 8evalúa cada fila -
Aplicación:
-
Resultado:
Formas alternativas (más legibles):
# Usando subset()
subset(estudiantes, nota >= 8)
# Mostrar solo el nombre
subset(estudiantes, nota >= 8, select = "nombre")
# nombre
# 1 Ana
# 3 Carlos
# Contar cuántos tienen nota >= 8
sum(estudiantes$nota >= 8)
# [1] 2
Filtros múltiples:
Solución pregunta 18 — Función sd()
Respuesta correcta: b) sd()
Explicación completa:
La función sd() (Standard Deviation) calcula la desviación estándar en R:
Fórmula de la desviación estándar muestral:
Cálculo manual en R:
notas <- c(7.5, 8.2, 9.1, 7.8, 8.5)
# Paso 1: Media
media <- mean(notas) # 8.22
# Paso 2: Diferencias al cuadrado
diferencias_cuadrado <- (notas - media)^2
# Paso 3: Suma y división
varianza <- sum(diferencias_cuadrado) / (length(notas) - 1)
# Paso 4: Raíz cuadrada
desv_manual <- sqrt(varianza) # Igual que sd(notas)
Funciones relacionadas:
var(notas) # Varianza (s²)
sd(notas) # Desviación estándar (s)
IQR(notas) # Rango intercuartílico
mad(notas) # Desviación absoluta mediana
Interpretación:
Una desviación estándar alta indica datos muy dispersos; una baja indica datos concentrados cerca de la media.
Solución pregunta 19 — Lógicos como números
Respuesta correcta: c) [1] 3
Explicación completa:
Dado el código:
En R, los valores lógicos se convierten automáticamente a números en contextos numéricos:
TRUE→ 1FALSE→ 0
Conversión paso a paso:
Uso práctico: Contar elementos que cumplen una condición
notas <- c(7.5, 8.2, 9.1, 7.8, 8.5)
# ¿Cuántas notas son >= 8?
sum(notas >= 8)
# [1] 3
# Desglose:
notas >= 8
# [1] FALSE TRUE TRUE FALSE TRUE
# Convertido a números: 0 + 1 + 1 + 0 + 1 = 3
Más ejemplos:
# Proporción de notas >= 8
mean(notas >= 8) # [1] 0.6 (60%)
# Todas las notas son >= 7?
all(notas >= 7) # [1] TRUE
# Alguna nota es >= 9?
any(notas >= 9) # [1] TRUE
Conversión explícita:
Solución pregunta 20 — Comentarios en R
Respuesta correcta: b) #
Explicación completa:
El símbolo # se usa para escribir comentarios en R:
# Este es un comentario
edad <- 25 # Comentario al final de la línea
# Los comentarios son ignorados por R
# Útiles para documentar tu código
Características:
- Todo lo que sigue a
#en la misma línea es ignorado por el intérprete - Se pueden poner al inicio de una línea o al final
- Son esenciales para documentar tu código
Buenas prácticas:
# ==========================================
# Análisis de Notas de Estudiantes
# Autor: Tu Nombre
# Fecha: 15 de enero de 2026
# ==========================================
# Cargar datos
notas <- c(7.5, 8.2, 9.1, 7.8, 8.5)
# Calcular estadísticos básicos
media <- mean(notas) # Media aritmética
desv <- sd(notas) # Desviación estándar
# Filtrar notas aprobadas (>= 5)
aprobados <- notas[notas >= 5]
# Mostrar resultados
print(paste("Media:", media))
Diferencia con otros lenguajes:
| Lenguaje | Comentario línea | Comentario bloque |
|---|---|---|
| R | # |
No hay nativo |
| Python | # |
''' ''' o """ """ |
| JavaScript | // |
/* */ |
| C/C++ | // |
/* */ |
Nota: R no tiene comentarios multi-línea nativos, pero puedes usar varios #: