Verificando Chaves
Parte da seção Lógica e Fluxo do Journey de R da Coddy. Lição 8 de 64.
Antes de procurar uma chave que pode estar ausente, verifique-a com %in% em relação aos nomes:
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Saída:
[1] TRUE
[1] FALSEUm if em torno da busca fornece um valor padrão quando uma chave está ausente, em vez de um NA ou de um erro:
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Saída:
[1] 0Uma chave que existe com o valor 0 é diferente de uma chave ausente: pears é conhecida e out of stock, plums não é vendida de forma alguma.
Listas usam a mesma verificação %in% names(). Um nome ausente em uma lista retorna NULL em vez de um erro, então is.null() também funciona:
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Saída:
[1] TRUE
[1] TRUEUma pequena função auxiliar mantém a verificação em um só lugar quando um programa procura muitas chaves:
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))Saída:
[1] 12
[1] 0Desafio
FácilComplete stock_status(stock, item). Retorne unknown se item não for uma chave de stock, out of stock se o valor for 0 e, caso contrário, in stock: seguido da quantidade.
O código fornecido lê o estoque como pares name=quantity separados por vírgulas, depois lê o item e imprime o valor retornado.
Experimente você mesmo
stock_status <- function(stock, item) {
# Escreva seu código aqui
""
}
# Código de entrada/saída fornecido: mantenha-o 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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Strings em Profundidade
Substrings com substr()Formatação com sprintf()Dividindo e UnindoPesquisando StringsSubstituindo TextoRecapitulação - Criador de Nome de Usuário4Matrizes
Criando MatrizesIndexando MatrizesResumos de Linhas e ColunasAritmética de MatrizesRecapitulação - Tabela de Assentos10Fluxo de Controle Avançado
A Função switch()ifelse() Vetorizadorepeat e breakFunções RecursivasRevisão — Classificador de Notas2Consultas de Chave-Valor
Consultas em Vetores NomeadosVerificando ChavesAdicionando e Removendo ChavesPercorrendo NomesRecapitulação - Mesa de Ações5Projeto - Boletim de Notas
Adicionando AlunosRegistrando Notas3Conjuntos e Contagem
Valores ÚnicosOperações com ConjuntosTestes de PertinênciaContagem com table()Recapitulação - Convidados do Evento6Funções como Valores
Funções AnônimasPassando FunçõesRetornando FunçõesClosures com EstadoRecapitulação - Regras de Desconto9Data Frames
Criando Data FramesColunas e LinhasFiltrando LinhasAdicionando e OrdenandoRecapitulação - Relatório de Vendas12Projeto - Rastreador de Despesas
Registro de DespesasGastos TotaisPratique por conta própria: Compilador de R online