Menu
Coddy logo textTech

Comprobar claves

Parte de la sección Lógica y flujo del Journey de R de Coddy. Lección 8 de 64.

Antes de buscar una clave que podría faltar, compruébalo con %in% en los nombres:

stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))

Salida:

[1] TRUE
[1] FALSE

Un if alrededor de la búsqueda proporciona un valor predeterminado cuando falta una clave, en lugar de un NA o un error:

stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)

Salida:

[1] 0

Una clave que existe con el valor 0 es distinta de una clave que falta: pears es conocido y out of stock, plums no se vende en absoluto.

Las listas usan la misma comprobación %in% names(). Un nombre que falta en una lista devuelve NULL en lugar de un error, así que is.null() también funciona:

user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))

Salida:

[1] TRUE
[1] TRUE

Un pequeño auxiliar mantiene la comprobación en un solo lugar cuando un programa busca muchas claves:

get_or <- function(x, key, default) {
  if (key %in% names(x)) x[[key]] else default
}
stock <- c(apples = 12)
print(get_or(stock, "apples", 0))
print(get_or(stock, "kiwis", 0))

Salida:

[1] 12
[1] 0
challenge icon

Desafío

Fácil

Completa stock_status(stock, item). Devuelve unknown si item no es una clave de stock, out of stock si su valor es 0 y, en caso contrario, in stock: seguido de la cantidad.

El código proporcionado lee el inventario como pares name=quantity separados por comas, después el artículo y muestra el valor devuelto.

Pruébalo tú mismo

stock_status <- function(stock, item) {
  # Escribe tu código aquí
  ""
}

# Código de entrada/salida proporcionado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
stock <- c()
for (pair in strsplit(input[1], ",")[[1]]) {
  kv <- strsplit(pair, "=")[[1]]
  stock[kv[1]] <- as.numeric(kv[2])
}
cat(stock_status(stock, input[2]), sep = "\n")
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y flujo

Practica por tu cuenta: Compilador de R online