Controllare le chiavi
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 8 di 64.
Prima di cercare una chiave che potrebbe non esserci, verificala con %in% rispetto ai nomi:
stock <- c(apples = 12, pears = 0)
print("pears" %in% names(stock))
print("plums" %in% names(stock))Risultato:
[1] TRUE
[1] FALSEUn if attorno alla ricerca fornisce un valore predefinito per una chiave mancante, invece di NA o di un errore:
stock <- c(apples = 12, pears = 0)
item <- "plums"
qty <- if (item %in% names(stock)) stock[[item]] else 0
print(qty)Output:
[1] 0Una chiave esistente con valore 0 è diversa da una chiave mancante: pears è noto e out of stock, plums non è affatto in vendita.
Le liste usano lo stesso controllo %in% names(). Un nome mancante in una lista restituisce NULL invece di un errore, quindi funziona anche is.null():
user <- list(name = "Ada", city = "London")
print(is.null(user[["email"]]))
print("city" %in% names(user))Output:
[1] TRUE
[1] TRUEUn piccolo aiutante mantiene il controllo in un unico posto quando un programma cerca molte chiavi:
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))Output:
[1] 12
[1] 0Sfida
FacileCompleta stock_status(stock, item). Restituisci unknown se item non è una chiave di stock, out of stock se il suo valore è 0 e, altrimenti, in stock: seguito dalla quantità.
Il codice fornito legge le scorte come coppie name=quantity separate da virgole, poi legge l'articolo e stampa il valore restituito.
Provalo tu
stock_status <- function(stock, item) {
# Escribe tu código aquí
""
}
# Código de entrada/salida proporcionado: déjalo 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")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online