Logica di errore personalizzata
A volte le funzioni assert_*() di assertive non forniscono il messaggio di errore più informativo. Ad esempio, le asserzioni che verificano se un numero rientra in un intervallo numerico diranno all’utente che un valore è fuori intervallo, ma non spiegheranno perché ciò sia un problema. In questi casi, puoi usare le funzioni is_*() insieme a messaggi, avvisi o errori per definire un feedback personalizzato.
La media armonica ha senso solo quando x contiene tutti valori positivi. (Prova a calcolare la media armonica di uno e meno uno per capire il perché.) Assicurati che i tuoi utenti lo sappiano!
Questo esercizio fa parte del corso
Introduzione alla scrittura di funzioni in R
Istruzioni dell'esercizio
- Se uno qualsiasi dei valori di
xè non positivo (ignorando gliNA), genera un errore. - Osserva cosa succede quando passi un argomento di tipo character a
calc_harmonic_mean().
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
calc_harmonic_mean <- function(x, na.rm = FALSE) {
assert_is_numeric(x)
# Check if any values of x are non-positive
if(___(___(___), na.rm = TRUE)) {
# Throw an error
___("x contains non-positive values, so the harmonic mean makes no sense.")
}
x %>%
get_reciprocal() %>%
mean(na.rm = na.rm) %>%
get_reciprocal()
}
# See what happens when you pass it negative numbers
calc_harmonic_mean(std_and_poor500$pe_ratio - 20)