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] FALSEUn 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] 0Una 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] TRUEUn 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] 0Desafío
FácilCompleta 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")
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
1Cadenas a fondo
Subcadenas con substr()Formateo con sprintf()Dividir y unirBuscar cadenasReemplazar textoRepaso - Constructor de nombres de usuario4Matrices
Creación de matricesIndexación de matricesResúmenes de filas y columnasAritmética de matricesRepaso: tabla de asientos2Búsquedas clave-valor
Búsquedas en vectores con nombreComprobar clavesAñadir y eliminar clavesRecorrer nombresRepaso: panel bursátil5Proyecto - Libro de calificaciones
Añadir estudiantesRegistrar calificaciones3Conjuntos y conteo
Valores únicosOperaciones con conjuntosPruebas de pertenenciaConteo con table()Repaso: invitados al evento6Funciones como valores
Funciones anónimasPasar funcionesDevolver funcionesClausuras con estadoRepaso: reglas de descuento9Marcos de datos
Creación de marcos de datosColumnas y filasFiltrado de filasAdición y ordenaciónRepaso - Informe de ventas12Proyecto: Rastreador de gastos
Registro de gastosGasto totalPractica por tu cuenta: Compilador de R online