Ejercicio 1: Función de Estadísticas Descriptivas
calcular_estadisticas <- function(x) {
# Validación: debe ser numérico
if (!is.numeric(x)) {
stop("Error: la entrada debe ser un vector numérico.")
}
# Cálculos ignorando NA
media <- mean(x, na.rm = TRUE)
mediana <- median(x, na.rm = TRUE)
desviacion_estandar <- sd(x, na.rm = TRUE)
# Devolver lista con nombres
resultado <- list(
media = media,
mediana = mediana,
desviacion_estandar = desviacion_estandar
)
return(resultado)
}
# vector simple
x1 <- c(1, 2, 3, 4, 5)
calcular_estadisticas(x1)
## $media
## [1] 3
##
## $mediana
## [1] 3
##
## $desviacion_estandar
## [1] 1.581139
#vector con NA
set.seed(123)
x2 <- c(10, 12, NA, 15, 18, NA, 20)
calcular_estadisticas(x2)
## $media
## [1] 15
##
## $mediana
## [1] 15
##
## $desviacion_estandar
## [1] 4.123106
# simples
res1 <- calcular_estadisticas(c(1, 2, 3, 4))
stopifnot(all.equal(res1$media, 2.5))
stopifnot(all.equal(res1$mediana, 2.5))
stopifnot(all.equal(res1$desviacion_estandar, sd(c(1,2,3,4))))
res2 <- calcular_estadisticas(c(NA, 2, 2, NA, 2))
stopifnot(isTRUE(all.equal(res2$media, 2)))
stopifnot(isTRUE(all.equal(res2$mediana, 2)))
stopifnot(isTRUE(all.equal(res2$desviacion_estandar, 0)))
Ejercicio 2: Función para Clasificar Valores (IMC)
clasificar_imc <- function(peso, altura) {
# Validaciones
if (!is.numeric(peso) || !is.numeric(altura) || length(peso) != 1L || length(altura) != 1L) {
stop("Error: El peso y la altura deben ser números positivos.")
}
if (!is.finite(peso) || !is.finite(altura) || peso <= 0 || altura <= 0) {
stop("Error: El peso y la altura deben ser números positivos.")
}
# Cálculo del IMC
imc <- peso / (altura^2)
# Clasificación OMS
if (imc < 18.5)
{clasificacion <- "Bajo peso" } else if (imc < 25) {clasificacion <- "Peso normal"} else if (imc < 30) {clasificacion <- "Sobrepeso"} else {
clasificacion <- "Obesidad"}
# Devolver
return(clasificacion)
}
# prueba representativos
clasificar_imc(50, 1.70) # Bajo peso
## [1] "Bajo peso"
clasificar_imc(68, 1.70) # Peso normal
## [1] "Peso normal"
clasificar_imc(80, 1.70) # Sobrepeso
## [1] "Sobrepeso"
clasificar_imc(95, 1.70) # Obesidad
## [1] "Obesidad"
# Verificacion
stopifnot(identical(clasificar_imc(50, 1.70), "Bajo peso"))
stopifnot(identical(clasificar_imc(68, 1.70), "Peso normal"))
stopifnot(identical(clasificar_imc(80, 1.70), "Sobrepeso"))
stopifnot(identical(clasificar_imc(95, 1.70), "Obesidad"))