Solución a la tarea 4

Fecha de publicación

5 de noviembre de 2024

Ejercicios

  1. Cree una función llamada num_vector que reciba un vector y devuelva una lista que incluya:

    • la clase del vector (pista: class())
    • el largo
    • cuantos elementos faltantes (NAs) contiene

Los elementos de la lista deben tener los nombres clase, largo y faltantes, respectivamente.

Código
num_vector <- function(x) {
  
  clase <- class(x)
  largo <- length(x)
  faltantes <- sum(is.na(x))
  
  return(list(clase = clase, largo = largo, faltantes = faltantes))
}
  1. Evalue la función num_vector con el siguiente vector: c(1, 2, 3, NA, 5, 6, 7, 8, 9, 10)
Código
num_vector(c(1, 2, 3, NA, 5, 6, 7, 8, 9, 10))
$clase
[1] "numeric"

$largo
[1] 10

$faltantes
[1] 1
  1. Cree una función llamada char_vector que reciba un vector de caracteres y devuelva una lista con tres elementos:

    • el número de elementos únicos (categorías únicas) en el vector (pista: length(unique(x)))
    • el número de observaciones por categoría (pista: table(x))
    • el nombre de la categoría más frecuente (pista: names(which.max(table(x))))

Los elementos de la lista deben tener nombres.

Código
char_vector <- function(x) {
  
  unicos <- length(unique(x))
  obs_por_categoria <- table(x)
  categoria_mas_frecuente <- names(which.max(table(x)))
  
  return(list(unicos = unicos, obs_por_categoria = obs_por_categoria, categoria_mas_frecuente = categoria_mas_frecuente))
}
  1. Evalue la función char_vector con el siguiente vector: c("a", "b", "a", "b", "b", "c", "b")
Código
char_vector(c("a", "b", "a", "b", "b", "c", "b"))
$unicos
[1] 3

$obs_por_categoria
x
a b c 
2 4 1 

$categoria_mas_frecuente
[1] "b"
  1. Cree una función llamada check_vector que reciba un vector. Si el vector es numérico debe aplicar la función num_vector y si es de caracteres debe aplicar la función char_vector. Si el vector no es ni numérico ni de caracteres, la función debe imprimir un mensaje (print()) indicando “x no es numérico ni categórico” (pista: is.numeric() y is.character()).
Código
# opción 1 sin "else"
check_vector <- function(x) {
  
  if(is.numeric(x)) {
    return(num_vector(x))
  }
  
  if(is.character(x)) {
    return(char_vector(x))
  }
  
  print("x no es numérico ni categórico")
}

# opción 2 con "else"
check_vector <- function(x) {
  
  if(is.numeric(x)) {
    return(num_vector(x))
  } else if(is.character(x)) {
    return(char_vector(x))
  } else {
    print("x no es numérico ni categórico")
  }
}
  1. Evalue la función check_vector con los siguientes 3 vectores (uno a la vez):

    • c("a", "b", "a", "b", "b", "c", NA, "b")
    • c(1, 2, 3, NA, 5, 6, 7, 8, 9, 10)
    • c(FALSE, TRUE)
Código
check_vector(c("a", "b", "a", "b", "b", "c", NA, "b"))
$unicos
[1] 4

$obs_por_categoria
x
a b c 
2 4 1 

$categoria_mas_frecuente
[1] "b"
Código
check_vector(c(1, 2, 3, NA, 5, 6, 7, 8, 9, 10))
$clase
[1] "numeric"

$largo
[1] 10

$faltantes
[1] 1
Código
check_vector(c(FALSE, TRUE))
[1] "x no es numérico ni categórico"