Anpassad felhanteringslogik
Ibland ger inte assert_*()-funktionerna i assertive de mest informativa felmeddelandena. Till exempel talar påståenden som kontrollerar om ett tal befinner sig inom ett numeriskt intervall om att ett värde är utanför intervallet, men förklarar inte varför det är ett problem. I sådana fall kan du använda is_*()-funktionerna tillsammans med meddelanden, varningar eller fel för att definiera anpassad återkoppling.
Det harmoniska medelvärdet är bara meningsfullt när alla värden i x är positiva. (Prova att beräkna det harmoniska medelvärdet av ett och minus ett för att förstå varför.) Se till att dina användare känner till detta!
Den här övningen är en del av kursen
Introduktion till att skriva funktioner i R
Övningsinstruktioner
- Om något värde i
xär icke-positivt (exklusiveNA-värden) ska du utlösa ett fel. - Observera vad som händer när du skickar ett teckenargument till
calc_harmonic_mean().
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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)