UNIVERSIDAD CENTRAL DEL ECUADOR
FACULTAD
DE CIENCIAS ECONÓMICAS
ESCUELA DE
ESTADÍSTICA
TERCER SEMESTRE
TALLER N°4: PUBLICAR MIS CONOCIMIENTOS EN
RPUBS
Grupo: Nº 5
Curso: SR3-001
Docente: Msc. Hernán Rengel
Quito - Ecuador
Noviembre
2025
La elaboración de reportes reproducibles es una competencia clave en el ámbito académico, especialmente en el análisis de datos. En este informe se presenta el desarrollo del Taller 3 utilizando el lenguaje R y la herramienta RMarkdown, integrando en un solo documento el planteamiento de cada ejercicio, el código implementado y los resultados obtenidos. Esta metodología permite organizar el trabajo de manera clara y garantiza que pueda ser reproducido fácilmente.
Como parte del proceso de compartir conocimientos, el documento final fue publicado en la plataforma RPubs, evidenciando el uso adecuado de herramientas de difusión académica. Además, se generó un archivo en formato PDF o Word con el desarrollo completo del taller, el enlace a la publicación y los pasos de dicho proceso. En conjunto, este informe cumple con la elaboración, organización y presentación solicitada mediante RMarkdown.
Desarrollar, documentar y presentar los diez ejercicios de programación en R dentro de un único documento reproducible (Rmarkdown o Quarto), asegurando que cada ejercicio incluya su planteamiento y el código funcional.
1. Resolver los diez ejercicios propuestos, aplicando correctamente la lógica de programación en R para temas como conversiones, cálculos financieros, fórmulas matemáticas, y lógica condicional.
2. Cumplir con la estructura de documentación requerida, generando un archivo final (PDF, Word o HTML) donde se detalle el planteamiento del problema y el código correspondiente para cada ejercicio.
3. Implementar la interacción con el usuario para la captura de datos de entrada necesarios para la ejecución de los programas, como temperaturas, horas trabajadas o datos personales (peso, estatura).
Para la realización de la publicación en RPUBS se tomara como documento a subir el taller N°3
Las temperaturas pueden expresarse en Fahrenheit o Celsius, pero no siempre se encuentran en la escala requerida; por ello, se necesita un programa que convierta una temperatura ingresada en una escala a su equivalente en la otra y la muestre en pantalla.
## Warning: package 'svDialogs' was built under R version 4.5.2
tem <- as.numeric(dlgInput(message = "Ingrese una temperatura en Fahrenheit")$res)
fare <- (tem - 32) * (5 / 9)
cat("La temperatura en Fahrenheit ingresada fue:", tem, "\n")## La temperatura en Fahrenheit ingresada fue: NA
## La temperatura equivalente en Celsius es: NA
tem2 <- as.numeric(dlgInput(message = "Ingrese una temperatura en Celsius")$res)
cel <- (tem2 * 9/5) + 32
cat("La temperatura en Celsius ingresada fue:", tem2, "\n")## La temperatura en Celsius ingresada fue: NA
## La temperatura equivalente en Fahrenheit es: NA
Se necesita calcular el pago total de un trabajador según sus horas laboradas. El pago depende del número de horas trabajadas y del coste por hora; además, si realizó horas extras, estas se pagan con un valor diferente al normal. El programa debe solicitar estos datos y mostrar la paga total correspondiente.
# install.packages("svDialogs")
library (svDialogs)
horas <- as.numeric(dlgInput(message = "¿ Cuál es tu número de horas trabajadas?")$res)
coste <- as.numeric(dlgInput(message = "¿Cuál es el coste por hora?")$res)
paga_t <- horas * coste
extra <- dlgInput(message = "¿Tienes horas extras? (si/no)")$res
if (extra == "si") {
horas_ex <- as.numeric(dlgInput(message = "¿Cuántas horas extras tienes?")$res)
coste_ex <- as.numeric(dlgInput(message = "¿Cuál es tu coste extra por hora?")$res)
paga_ex <- horas_ex * coste_ex
total_f <- paga_t + paga_ex
cat (" Tu paga que te corresponde con las horas extras es: ",total_f,"\n")} else {
cat ("La paga que le corresponde es: ",paga_t, "\n")
}## La paga que le corresponde es: NA
Se requiere un programa que pida al usuario un número entero positivo “n”y calcule la suma de todos los enteros desde 1 hasta “n”. Para obtener el resultado se utilizará la fórmula.
n <- as.integer(dlgInput(message = "Ingrese un número entero positivo:")$res)
if (!is.na(n) && n > 0) {
suma <- (n * (n + 1)) / 2
cat("La suma de los primeros", n , "enteros positivos es:", suma)
} else {
cat("Error: Debe ingresar un número entero POSITIVO.")
}## Error: Debe ingresar un número entero POSITIVO.
Las personas suelen conocer su peso y estatura, pero no siempre pueden interpretar su índice de masa corporal (IMC). Para facilitar esta evaluación, se requiere un programa que calcule el IMC a partir del peso y la estatura ingresados por el usuario y muestre el resultado con dos decimales.
#install.packages("svDialogs")
#library("svDialogs")
peso <- as.numeric(dlgInput(message = "¿Ingresa tu peso (en kg)?")$res)
estatura <- as.numeric(dlgInput(message = "¿Ingresa tu estatura (en metros)?")$res)
imc <- round(peso / (estatura^2), 2)
cat ("Tu índice de masa corporal es:",imc, "\n" )## Tu índice de masa corporal es: NA
Se requiere un programa que solicite al usuario la cantidad a invertir, el interés anual y el número de años, y que luego muestre el capital obtenido al final de la inversión.
#Preguntas que se hace al usuario.
capital<-dlgInput(message="Ingrese el capital a invertir")$res
interes<-dlgInput(message="Ingrese el interes ")$res
tiempo <-dlgInput(message="Ingrese el número de años")$res
# clases de las variables ingresadas
capital<- as.numeric(capital)
class(capital)## [1] "numeric"
## [1] "numeric"
## [1] "numeric"
#Interes en decimal
d_interes <- interes / 100
# Ver el total del capital
cap_total <- capital*(1+d_interes)^tiempo
# Mostrar resultado
cat("El capital obtenido después de", tiempo, "años será de:", cap_total, "\n")## El capital obtenido después de NA años será de: NA
Se necesita un programa que solicite al usuario un valor de tiempo expresado en horas, minutos o segundos. Luego, el usuario debe elegir a qué otra unidad de tiempo desea convertirlo. El programa debe realizar la conversión correspondiente y mostrar el resultado final de forma clara.
## [1] ""
## [1] "integer"
##
## Unidades disponibles:
## 1 - Horas
## 2 - Minutos
## 3 - Segundos
## [1] ""
## [1] "integer"
##
## Unidades disponibles:
## 1 - Horas
## 2 - Minutos
## 3 - Segundos
salida <-dlgInput(message = "Seleccione la unidad de salida (1-3): ")$res
salida<- as.integer(salida)
class(salida)## [1] "integer"
# Validar entradas
if (is.na(valor) || is.na(entrada) || is.na(salida) ||
entrada < 1 || entrada > 3 ||
salida < 1 || salida > 3) {
cat("Error: Entradas inválidas\n")
} else {
# Convertir todo a segundos primero
if (entrada == 1) { # Horas a segundos
segundos <- valor * 3600
entrada_texto <- "horas"
} else if (entrada == 2) { # Minutos a segundos
segundos <- valor * 60
unidad_entrada_texto <- "minutos"
} else { # Segundos a segundos
segundos <- valor
unidad_entrada_texto <- "segundos"
}
if (salida == 1) { # Segundos a horas
resultado <- segundos / 3600
unidad_salida_texto <- "horas"
} else if (salida == 2) { # Segundos a minutos
resultado <- segundos / 60
unidad_salida_texto <- "minutos"
} else { # Segundos a segundos
resultado <- segundos
unidad_salida_texto <- "segundos"
}
print("El resultado es")
cat(valor, unidad_entrada_texto, "=", round(resultado, 4), unidad_salida_texto, "\n")
cat("\nConversiones completas:\n")
cat("- Horas:", round(segundos / 3600, 4), "\n")
cat("- Minutos:", round(segundos / 60, 4), "\n")
cat("- Segundos:", segundos, "\n")
}## Error: Entradas inválidas
Se requiere un programa que permita al usuario digitar varios números y, una vez ingresados, los muestre en pantalla ordenados de menor a mayor.
library(svDialogs)
numeros <- c()
n <- as.integer(dlgInput(message = "¿Cuántos números quieres ingresar?")$res)
# Validación sin detener el render
if (is.na(n) || n <= 0) {
cat("No se ingresó un número válido. No es posible ordenar números.\n")
} else {
for (i in 1:n) {
num <- as.numeric(dlgInput(message = paste("Ingresa el número", i, ":"))$res)
numeros <- c(numeros, num)
}
num_ordenados <- sort(numeros)
cat("Los números ordenados son:", num_ordenados, "\n")
}## No se ingresó un número válido. No es posible ordenar números.
Se necesita un programa que solicite al usuario un número entero positivo y calcule su factorial, es decir, el producto de todos los enteros desde 1 hasta ese número. El programa debe mostrar el resultado en pantalla de manera clara y comprensible.
## Ingrese un número:
## Validar solo con if / else
if (num == "") {
cat("Error: vacío.\n")
} else if (!grepl("^[0-9]+$", num)) {
cat("Error: solo números.\n")
} else {
n <- as.integer(num)
## Calcular factorial
factorial <- 1
for (i in 1:n) {
factorial <- factorial * i
}
cat("Factorial:", factorial, "\n")
}## Error: vacío.
Se requiere un programa que solicite al usuario un número entero y determine si es primo. El programa debe verificar si el número solo es divisible entre 1 y él mismo, y luego mostrar un mensaje indicando claramente si es primo o no.
## Ingrese un número:
n <- as.numeric(n) # Convertimos a número
# Verificamos si el valor ingresado es válido
if (is.na(n)) {
print("Error: debe ingresar un número válido.")
} else {
# Comprobación de número primo
if (n <= 1) {
print("El número NO es primo.")
} else {
es_primo <- TRUE
for (i in 2:(n - 1)) {
if (n %% i == 0) {
es_primo <- FALSE
}
}
if (es_primo) {
print("El número ES primo.")
} else {
print("El número NO es primo.")
}
}
}## [1] "Error: debe ingresar un número válido."
Se necesita un programa que solicite al usuario un número entero y determine si es par o impar. El programa debe evaluar el número ingresado y mostrar un mensaje indicando claramente su tipo.
# install.packages("svDialogs")
library(svDialogs)
num <- as.integer(dlgInput("Ingresa un número:")$res)
if (!is.na(num)) {
if (num %% 2 == 0) {
cat("El número es par.\n")
} else {
cat("El número es impar.\n")
}
} else {
cat("No ingresaste un número válido.\n")
}## No ingresaste un número válido.
Validación y Conversión de Datos son Críticas: La mayoría de los ejercicios requieren convertir la entrada del usuario (que es texto) a números (as.numeric, as.integer) y validarla (verificar si es NA o si cumple condiciones como ser positivo), asegurando que las operaciones matemáticas se realicen correctamente y el código sea robusto.
Estructuras de Control Definen la Lógica: Se usa extensamente la estructura if/else para la toma de decisiones y la aplicación de fórmulas condicionales (ej. calcular extras o convertir unidades), y el bucle for para operaciones repetitivas como el cálculo de factoriales o la gestión de múltiples entradas.
R es Ideal para Fórmulas Analíticas: El lenguaje permite una implementación directa y legible de fórmulas matemáticas (IMC, interés compuesto, suma de Gauss) y utiliza eficientemente funciones nativas de R (sort, round) para el procesamiento y formateo de resultados.
Todos los programas que dependen de la entrada del usuario (readline), como el Programa 1 (Potencia), para asegurar que el usuario realmente ingresó un número, evitando que el programa falle o devuelva resultados inesperados (NA) si se introduce texto.
Es recomendable aplicar el uso del script para poder identificar los problemas efectuados al momento de ejecutar cada ejercicio ya que indica si vamos trabajando de una buena o mala manera.
Es recomendable aplicar cada uno de los ejercicios de manera ordenada para que en el momento de subir nuestro archivo en RPUBS no exista algun problema.
Es importante renderizar el documento en los Knit ya que este almacenara los diferentes tipos de paquetes usados en cada uno de los programas y su manera de subir el documento será exitoso.