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

Integrantes:
  • • Diego Analuca
  • • Greace Barragán
  • • Sarella Gutiérrez
  • • Cristian Pallo
  • • Nicole Velásquez
  • • Pamela Yascaribay

Curso: SR3-001

Docente: Msc. Hernán Rengel

Quito - Ecuador
Noviembre 2025

1.- INTRODUCCIÓN

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.

2.- OBJETIVO GENERAL

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.

3.- OBJETIVOS ESPECÍFICOS

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).

4.- DESARROLLO

Para la realización de la publicación en RPUBS se tomara como documento a subir el taller N°3

Realice cada ejercicio con su planteamiento del problema (escrito) y luego la secuencia de código realizado en R

EJERCICIOS:

1: Escribir un programa que pida la temperatura y si esta es en Fahrenheit o Celsius y presentar en pantalla su transformación en la otra medida.

- Planteamiento del problema:

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.

- Código en R

#install.packages("svDialogs")
library("svDialogs")
## 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
cat("La temperatura equivalente en Celsius es:", fare, "\n\n")
## 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
cat("La temperatura equivalente en Fahrenheit es:", cel, "\n")
## La temperatura equivalente en Fahrenheit es: NA
2: Escribir un programa que pregunte al usuario por el número de horas trabajadas y el coste por hora. Después debe mostrar por pantalla la paga que le corresponde, además debe preguntar si existen horas extras que tienen un valor diferente y con estos valores se calcule la paga correspondiente

- Planteamiento del problema:

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.

- Código en R

# 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
3: Lectura de la suma de enteros positivos
\[ \text{suma} = \frac{n(n+1)}{2} \]

- Planteamiento del problema:

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.

- Código en R

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.
4: Escribir un programa que pida al usuario su peso (en kg) y estatura (en metros), calcule el índice de masa corporal y lo almacene en una variable, y muestre por pantalla la frase Tu índice de masa corporal es donde es el índice de masa corporal calculado redondeado con dos decimales

- Planteamiento del problema:

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.

- Código en R

#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
5: Escribir un programa que pregunte al usuario una cantidad a invertir, el interés anual y el número de años, y muestre por pantalla el capital obtenido en la inversión

- Planteamiento del problema:

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.

- Código en R

#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"
interes<- as.numeric(interes)
class(interes)
## [1] "numeric"
tiempo <- as.numeric(tiempo)
class(tiempo)
## [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
6: Realizar un programa que pida el tiempo ya sea en horas, minutos o segundos, luego indicar en qué tipo de tiempo desea transformar y luego presentar el resultado

- Planteamiento del problema:

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.

- Código en R

valor <- dlgInput(message="Ingrese el tiempo")$res
print(valor)
## [1] ""
valor <- as.integer(valor)
class(valor)
## [1] "integer"
## Tiempo inicial

cat("\nUnidades disponibles:\n")
## 
## Unidades disponibles:
cat("1 - Horas\n")
## 1 - Horas
cat("2 - Minutos\n")
## 2 - Minutos
cat("3 - Segundos\n")
## 3 - Segundos
entrada <-dlgInput(message = "Seleccione la unidad de entrada (1-3): ")$res
entrada
## [1] ""
entrada<- as.integer(entrada)
class(entrada)
## [1] "integer"
cat("\nUnidades disponibles:\n")
## 
## Unidades disponibles:
cat("1 - Horas\n")
## 1 - Horas
cat("2 - Minutos\n")
## 2 - Minutos
cat("3 - Segundos\n")
## 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
7: Escribir un programa en el que se digiten varios números y luego los números se presenten en pantalla ordenados

- Planteamiento del problema:

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.

- Código en R

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.
8: Escribir un programa que calcule el factorial de un número que ha sido digitado por el usuario

- Planteamiento del problema:

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.

- Código en R

## Pedir número
num <- readline(prompt = "Ingrese un número: ")
## 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.
9: Escribir un programa que pida un número e indique si el número es primo o no

- Planteamiento del problema:

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.

- Código en R

# Pedimos un número al usuario
n <- readline("Ingrese un número: ")
## 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."
10: Escribir un programa que pida un número e indique si el número es par o impar

- Planteamiento del problema:

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.

- Código en R

# 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.

5.- CONCLUSIONES

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.

6.- RECOMENDACIONES

  1. 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.

  2. 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.

  3. 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.

  4. 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.