Funzioni anonime
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 27 di 64.
In R una funzione è un valore come un numero o una stringa. function(x) x * 2 crea una funzione senza assegnarle un nome, e il valore della sua ultima espressione è quello che restituisce:
double <- function(x) x * 2
print(double(21))
print((function(x) x + 1)(9))Output:
[1] 42
[1] 10R 4.1 ha aggiunto una forma abbreviata: \(x) significa lo stesso di function(x). Usa le parentesi graffe quando il corpo richiede più righe:
square <- \(x) x^2
label <- function(x) {
size <- if (x > 10) "big" else "small"
paste(x, "is", size)
}
print(square(4))
print(label(12))Output:
[1] 16
[1] "12 is big"Poiché le funzioni sono valori, una lista può contenerne diverse associate a dei nomi. ops[["inc"]] è una funzione, quindi ops[["inc"]](5) la chiama:
ops <- list(inc = \(x) x + 1, neg = \(x) -x)
print(ops[["inc"]](5))
print(names(ops))Output:
[1] 6
[1] "inc" "neg"Una funzione può accettare diversi argomenti e assegnare valori predefiniti ad alcuni di essi, proprio come una funzione con nome:
area <- \(w, h = w) w * h
print(area(3))
print(area(3, 5))Output:
[1] 9
[1] 15Sfida
FacileCompleta la lista ops con tre funzioni anonime con un argomento:
doublerestituisce l'argomento moltiplicato per 2squarerestituisce l'argomento moltiplicato per se stessonegaterestituisce l'argomento con il segno invertito
Il codice fornito legge il nome di un'operazione e un numero, chiama quella funzione da ops e stampa il risultato.
Provalo tu
ops <- list(
# Scrivi qui il tuo codice
double = function(x) x
)
# Codice di input/output fornito: lascialo così com'è
input <- suppressWarnings(readLines(file("stdin")))
f <- ops[[input[1]]]
cat(f(as.numeric(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