es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declaración que devuelve la última condición.

He estado haciendo algo de trabajo jugando con R shiny. Soy bastante nuevo en R y esto podría ser un simple error de sintaxis.
El siguiente código pertenece a mi server.r y el renderText (mx ()) parece devolver solo la salida del último if cronológico. (Cuando los intercambio, cambia en consecuencia). El input $numbers es una entrada de texto que cambio a una lista, y el input $mean_type corresponde a un botón de radio que tiene las siguientes opciones:

radioButtons('mean_type', '¿Qué operación?', 
c('Media aritmética' = 'A', 'Media geométrica' = 'G', 'Varianza' = 'V'))

Cualquier ayuda sería muy apreciada, ¡gracias!

mx <- reactive({
            x <- as.numeric(unlist(strsplit(input$numbers,",")))
            if (input$mean_type == 'A') {
                mean(x)
            }

            if (input$mean_type == 'V') {
                sd(x)
            }

            if (input$mean_type == 'G') {
                geometric.mean(x)
            }
        })
output$mean <- renderText(mx())
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece ser que el problema radica en que estás utilizando múltiples declaraciones if en lugar de utilizar una declaración if else. Esto significa que cada declaración if se evalúa de manera independiente a las demás, lo cual lleva a considerar únicamente la última declaración if.

    Para solucionar este problema, intenta utilizar una declaración if else. De esta manera, el código solo ejecutará la primera condición que se evalúe como VERDADERA y saltará el resto.

    Aquí está una versión actualizada de tu código con la declaración if else:

    mx <- reactive({
      x <- as.numeric(unlist(strsplit(input$numbers,",")))
      if (input$mean_type == 'A') {
        mean(x)
      } else if (input$mean_type == 'V') {
        sd(x)
      } else if (input$mean_type == 'G') {
        geometric.mean(x)
      }
    })
    output$mean <- renderText(mx())
    

    Esto debería solucionar el problema que estabas experimentando. ¡Espero que te ayude!

Comments are closed.