La funzione switch()
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 47 di 64.
switch(x, name = value, ...) confronta il testo x con i nomi e restituisce il valore di quello che corrisponde. Sostituisce una lunga catena di confronti else if con la stessa variabile:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)Output:
[1] 3Un ultimo valore senza nome è quello predefinito, usato quando non corrisponde nulla. Senza un valore predefinito, un switch() senza corrispondenze restituisce NULL senza mostrarlo:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))Output:
[1] "work"
[1] TRUEUn valore vuoto passa a quello successivo, quindi più nomi possono condividere lo stesso risultato:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))Output:
[1] "weekend"
[1] "weekday"I valori possono essere interi blocchi di codice tra parentesi graffe e il risultato è l’ultima espressione del blocco che viene eseguita:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))Output:
[1] 12
[1] 78.54Sfida
FacileCompleta calculate(a, op, b). op è uno tra plus, minus, times e over. Restituisci il risultato dell'applicazione ad a e b, oppure unknown operation per qualsiasi altro op. La divisione per zero restituisce cannot divide by zero.
Il codice fornito legge a, op e b (uno per riga) e stampa il valore restituito.
Provalo tu
calculate <- function(a, op, b) {
# Write your code here
"unknown operation"
}
# Supplied input/output code: keep it as it is
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), 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