Track
/
R
R
/
Esercizi
/
Osservatore di uccelli
Osservatore di uccelli

Osservatore di uccelli

Esercizio di apprendimento

Introduzione

Questo è un concetto importante in R. Per aiutarti a orientarti tra le possibilità, può essere utile considerare la dimensionalità dell'input e dell'output delle varie funzioni.

Vettore in input, scalare in output

Abbiamo già visto funzioni che ricevono in input un vettore e restituiscono un singolo valore simile a uno scalare:

> v <- 1:5
> length(v)
#> [1] 5
> sum(v)
#> [1] 15

Anche molte funzioni statistiche rientrano in questa categoria, come mean().

Per i vettori logici, ci sono all() e any().

Vettore in input, vettore in output

Molte funzioni in R operano su interi vettori, spesso restituendo un vettore in output. Questo include la maggior parte delle funzioni matematiche:

> sq <- c(4, 9, 16, 25)
> sqrt(sq) # square root
#> [1] 2 3 4 5

Non è solo conciso e comodo: evita la necessità di cicli, comprensioni di liste o ricorsione, che sono comuni in altri linguaggi. In R, le funzioni vettoriali sono spesso molto più veloci di queste tecniche.

Per ordinare un vettore, ci sono sort(), che restituisce i valori, e order(), che restituisce gli indici:

> v <- c("I", "am", "not", "in", "order")
> sort(v)
#> [1] "am"    "I"     "in"    "not"   "order"
> order(v)
#> [1] 2 1 4 3 5

L'impostazione predefinita è l'ordinamento crescente. Specifica decreasing = TRUE se necessario, oppure usa rev() per invertire un vettore esistente.

v <- c("I", "am", "not", "in", "order")
sort(v, decreasing = TRUE)
#> [1] "order" "not"   "in"    "I"     "am"

rev(1:4)
#> [1] 4 3 2 1

Ci sono anche funzioni che producono output vettoriali cumulativi, operando sul vettore di input da sinistra a destra:

> cumsum(1:5)
#> [1]  1  3  6 10 15  # sums
> cumprod(1:5)
#> [1]   1   2   6  24 120 # equivalent to factorials

Più vettori in input, vettore in output

Un'estensione di questo concetto può essere usata anche per confrontare i vettori. Per esempio, considera la funzione di massimo a coppie pmax():

> v
#> [1] 2 7 9
> w
#> [1] 3 1 5
> pmax(v, w)
#> [1] 3 7 9 # max of each pairwise comparison

Istruzioni

Sei un appassionato osservatore di uccelli che tiene traccia di quanti uccelli hanno visitato il tuo giardino negli ultimi sette giorni.

Hai sei attività, tutte legate al numero di uccelli che hanno visitato il tuo giardino.

1. Controlla quanti uccelli sono venuti oggi

Implementa la funzione today() in modo che restituisca quanti uccelli hanno visitato il tuo giardino oggi. I conteggi degli uccelli sono ordinati per giorno: il primo elemento è il conteggio del giorno più lontano, l'ultimo è il conteggio di oggi.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
today(birds_per_day)
# => 1

2. Incrementa il conteggio di oggi

Implementa la funzione increment_todays_count() per incrementare il conteggio di oggi:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
increment_todays_count(birds_per_day)
# => c(2, 5, 0, 7, 4, 2)

3. Controlla se c'è stato un giorno senza uccelli in visita

Implementa la funzione has_day_without_birds() che restituisce TRUE se c'è stato un giorno in cui zero uccelli hanno visitato il giardino; altrimenti restituisce FALSE:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
has_day_without_birds(birds_per_day)
# => true

4. Calcola il numero di uccelli in visita nei primi giorni specificati

Implementa la funzione count_for_first_days() che restituisce il numero di uccelli che hanno visitato il tuo giardino dall'inizio della settimana, ma limita il conteggio al numero di giorni specificato dall'inizio della settimana.

birds_per_day <- c(2, 5, 0, 7, 4, 1)
count_for_first_days(birds_per_day, 4)
# => 14

5. Calcola il numero di giorni intensi

Alcuni giorni sono più intensi di altri. Un giorno intenso è un giorno in cui cinque o più uccelli hanno visitato il tuo giardino. Implementa la funzione busy_days() in modo che restituisca il numero di giorni intensi:

birds_per_day <- c(2, 5, 0, 7, 4, 1)
busy_days(birds_per_day)
# => 2

6. Calcola il totale progressivo delle visite degli uccelli nell'ultima settimana

Sei curioso di sapere quanti uccelli in totale sono venuti finora questa settimana. Calcola i totali cumulativi per ogni giorno.

running_total(c(7, 6, 5, 4, 3, 2, 1))
#> [1]  7 13 18 22 25 27 28

7. Ordina i nomi dei giorni in base a quanto sono intensi

Supponi che le visite degli uccelli siano influenzate dal traffico stradale nelle vicinanze, che è diverso nei fine settimana rispetto ai giorni feriali.

Ordina le abbreviazioni dei giorni in ordine decrescente rispetto a quanti uccelli sono venuti.

day_names <- c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
birds_per_day <- c(5, 2, 4, 6, 0, 9, 8)
busy_days_of_week(birds_per_day, day_names)
#> [1] "Sat" "Sun" "Thu" "Mon" "Wed" "Tue" "Fri"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
R Exercism

Vuoi iniziare Osservatore di uccelli?

Iscriviti a Exercism per imparare e padroneggiare R con 21 concetti111 esercizi e il mentoring di persone reali, tutto gratis.