Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

265
Visualizações
Función de cambio en R: ¿cómo arrojar un mensaje de error o un valor predeterminado cuando la entrada no coincide?

Usando switch() en R, ¿cómo puedo abortar con un error si la entrada a EXPR no está definida dentro de la instrucción switch ?

Por ejemplo, considere la siguiente función animal_sound() . Acepta el nombre de un animal y devuelve el sonido que hace el animal.

 animal_sound <- function(x) { switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack") }

Siempre que el animal esté definido dentro de switch() , esto funciona.

 animal_sound("bee") #> [1] "bzzz" animal_sound("cat") #> [1] "meow"

Pero si pasamos un animal que no está definido, el valor de retorno está en blanco (ni siquiera NULL ).

 animal_sound("alligator") ## nothing is printed to console

¿Hay alguna forma de generar un error o establecer un valor de retorno predeterminado en caso de que la entrada no coincida?

Podría haber hecho lo siguiente, que es una solución no deseada:

 animal_sound_with_error_message <- function(x) { valid_input_animals <- c("dog", "cat", "bee", "duck") input_is_valid <- any(x %in% valid_input_animals) if (!input_is_valid) { stop("animal is not supported. Try a different animal.") } switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack") } animal_sound_with_error_message("bee") #> [1] "bzzz" animal_sound_with_error_message("cat") #> [1] "meow" animal_sound_with_error_message("alligator") #> Error in animal_sound_with_error_message("alligator"): animal is not supported. Try a different animal.

Creado el 2021-10-18 por el paquete reprex (v0.3.0)

No me gusta esta solución porque requiere definir manualmente todas las entradas posibles al principio. Es tonto (dado que definimos lo mismo más adelante dentro switch() ) y propenso a errores en caso de que agregue más entradas para switch más adelante, y me olvide de actualizar el vector valid_input .

¿Existe una forma elegante/concisa de devolver un mensaje de error informativo en caso de que la entrada no sea compatible?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede comprobar los argumentos con la función match.arg() . Esto generará un mensaje de error apropiado.

No es menos propenso a errores, pero en este caso es una buena práctica ya que {Roxygen} puede presentar el argumento en uso.

 animal_sound_with_error_message <- function(x = c("dog", "cat", "bee", "duck")) { match.arg(x) switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack") }
over 4 years ago · Santiago Trujillo Relatório

0

Puede agregar un valor predeterminado como este.

 animal_sound <- function(x) { switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack", "default") }
over 4 years ago · Santiago Trujillo Relatório

0

Según la respuesta de @Norie y el comentario de @Roland, lo he adaptado un poco más.

 animal_sound <- function(x) { my_error <- rlang::abort(paste(x, "isnt supported", sep = " ")) switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack", my_error) } animal_sound("crocodile") #> Error: crocodile isnt supported

Creado el 2021-10-18 por el paquete reprex (v0.3.0)

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda