lapply e sapply
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 32 di 64.
lapply(x, f) chiama f su ogni elemento di x e restituisce i risultati in una lista, un elemento per ogni input:
squares <- lapply(1:3, function(i) i^2)
print(length(squares))
print(squares[[3]])Output:
[1] 3
[1] 9sapply() fa la stessa cosa e semplifica il risultato: quando ogni chiamata restituisce un valore, ottieni un vettore semplice invece di una lista:
print(sapply(1:3, function(i) i^2))
print(sapply(c(4, 9, 16), sqrt))Output:
[1] 1 4 9
[1] 2 3 4Su un vettore di caratteri, sapply() assegna ai risultati i nomi degli elementi di input. Aggiungi USE.NAMES = FALSE per ottenere un vettore semplice:
words <- c("tea", "coffee")
print(sapply(words, nchar))
print(sapply(words, nchar, USE.NAMES = FALSE))Output:
tea coffee
3 6
[1] 3 6Queste funzioni sostituiscono il ciclo che costruisce un risultato un elemento alla volta. Entrambe le versioni qui sotto calcolano quante vocali contiene ciascuna parola:
words <- c("banana", "sky", "idea")
vowels <- function(w) sum(strsplit(w, "")[[1]] %in% c("a", "e", "i", "o", "u"))
counts <- c()
for (w in words) counts <- c(counts, vowels(w))
print(counts)
print(sapply(words, vowels, USE.NAMES = FALSE))Output:
[1] 3 0 3
[1] 3 0 3Sfida
FacileCompleta vowel_counts(words). Restituisci una riga per parola, banana: 3, con il numero di vocali (a, e, i, o, u) presenti nella parola. Usa sapply() per contare le vocali di tutte le parole.
Il codice fornito legge le parole in una riga separate da virgole, composte da parole in minuscolo, e stampa ogni riga restituita.
Provalo tu
vowel_counts <- function(words) {
# Escribe tu código aquí
character(0)
}
# Código de entrada/salida proporcionado: mantenlo tal como está
input <- suppressWarnings(readLines(file("stdin")))
cat(vowel_counts(strsplit(input[1], ",")[[1]]), 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