Lógica de erro personalizada
Às vezes, as funções assert_*() do assertive não fornecem a mensagem de erro mais informativa. Por exemplo, as asserções que verificam se um número está em um intervalo numérico avisam que um valor está fora do intervalo, mas não dizem por que isso é um problema. Nesses casos, você pode usar as funções is_*() junto com mensagens, avisos ou erros para definir feedback personalizado.
A média harmônica só faz sentido quando x tem todos os valores positivos. (Tente calcular a média harmônica de um e menos um para entender o porquê.) Garanta que seus usuários saibam disso!
Este exercício faz parte do curso
Introdução à Escrita de Funções em R
Instruções do exercício
- Se algum valor de
xfor não positivo (ignorandoNAs), então lance um erro. - Veja o que acontece quando você passa um argumento de caracteres para
calc_harmonic_mean().
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
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)