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.

Cambiar la trama con uno o más parámetros en R-Shiny

Tengo poca o ninguna experiencia con R-Shiny, pero pensé que podría hacerlo con un ejemplo sencillo. Utilicé el libro “Mastering Shiny” de Wickham, pero parece que no logro que funcione.

Básicamente, estoy intentando hacer algo muy simple: me gustaría producir un gráfico que dependa de un parámetro (forma). Mi código es el siguiente (simplificado a su esencia):

library(sn)
library(ggplot)

ui <- fluidPage(
  numericInput("a", label = "alpha", min = -3, max = 3, value = 0.0),
  plotOutput("plot")

)

server <- function(input, output, session){
  alpha <- reactive(input$a)
  x  <- seq(-4, 4, 0.1)
  y1 <- dsn(x, 0, 1.2, alpha)

  df <- data.frame(x, y1)

  output$plot <- renderPlot({
    ggplot(df, aes(x)) +
    geom_line(aes(y=y1), size=1.0, color="black")
  })

}

shinyApp(ui, server)

Es un código muy simple, pero sigo obteniendo este mensaje de error:

Listening on http://xxxxxxxxxxxxxxxx
Warning: Error in abs: non-numeric argument to mathematical function
  50: dsn
  49: server [#7]
Error in abs(alpha) : non-numeric argument to mathematical function

He estado intentando resolver este problema durante al menos un día, pero sin éxito. Agradecería mucho si alguien amable pudiera decirme qué estoy haciendo mal.

Gracias,

Maurice.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Estimado Maurice,

    Gracias por solicitar ayuda con tu código R-Shiny.

    Según el mensaje de error que recibiste, parece que hay un problema con el parámetro “alpha” que no es reconocido como numérico.

    Para solucionar esto, puedes intentar convertir la entrada reactiva “alpha” en un valor numérico utilizando la función as.numeric(). Puedes hacer esto agregando la siguiente línea de código dentro de la función del servidor:

    alpha_num <- as.numeric(alpha())

    Luego, reemplaza “alpha” por “alpha_num” en la función dsn(). Tu función del servidor debería verse así:

    server <- function(input, output, session){
      alpha <- reactive(input$a)
      alpha_num <- as.numeric(alpha())    # convertir alpha a numérico
    
      x <- seq(-4, 4, 0.1)
      y1 <- dsn(x, 0, 1.2, alpha_num)    # usar alpha_num en la función dsn()
    
      df <- data.frame(x, y1)
    
      output$plot <- renderPlot({
        ggplot(df, aes(x)) +
        geom_line(aes(y = y1), size = 1.0, color = "black")
      })   
    }
    

    Espero que esto te sea útil. Por favor, hazme saber si tienes más preguntas o si puedo ayudarte en algo más.

    Saludos cordiales,
    [Tu Nombre] (Experto en TI especializado en R-Shiny)

Comments are closed.