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.

Cómo mostrar salidas basadas en un botón de radio en R Shiny?

Hola, tengo un problema con R Shiny. Preparé 3 “outputs” en el lado del servidor: uno para mostrar una tabla de datos, otro para mostrar summary() y otro para mostrar str(). Luego, preparé botones de radio “preview”, “str” y “summary”. Lo que quiero lograr es un cambio reactivo del output basado en la elección de los botones de radio.

SERVIDOR:

.
.
.
    output$contents =
      renderTable({

<pre><code>  req(input$file1)

  df <- read.csv(input$file1$datapath,
                 header = input$header,
                 sep = input$sep,
                 quote = input$quote)

  if(input$disp == "head") {
    return(head(df))
  }
  else {
    return(df)
  }

})

output$summary = 
  renderPrint({
    req(input$file1)

    df <- read.csv(input$file1$datapath,
                   header = input$header,
                   sep = input$sep,
                   quote = input$quote)

  summary(df)
})

output$str = 
  renderPrint({
    req(input$file1)

    df <- read.csv(input$file1$datapath,
                   header = input$header,
                   sep = input$sep,
                   quote = input$quote)

    str(df)
  })
</code></pre>

<p>```</p>

INTERFAZ DE USUARIO (UI):

.
.
.

sidebarPanel(
radioButtons(
“dman_preview”, “Display:”,
c(“preview”, “str”, “summary”),
selected = “preview”,
inline = TRUE
),
),

mainPanel(
tableOutput(“contents”),
verbatimTextOutput(“summary”),
verbatimTextOutput(“str”)
)
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el cambio reactivo de la salida basado en la elección del botón de radio, necesitas agregar una función reactiva en el servidor que tome la entrada del botón de radio y devuelva la salida correspondiente. Aquí tienes un ejemplo de código:

    output$selected_output = renderUI({
      req(input$file1)
    
      df <- read.csv(input$file1$datapath,
                     header = input$header,
                     sep = input$sep,
                     quote = input$quote)
    
      switch(input$dman_preview,
             "preview" = tableOutput("contents"),
             "summary" = verbatimTextOutput("summary"),
             "str" = verbatimTextOutput("str"))      
    })
    

    Luego, en la interfaz de usuario, debes reemplazar las salidas individuales con la nueva selected_output:

    mainPanel(
      uiOutput("selected_output")
    )
    

    Esto debería resultar en que la salida seleccionada se muestre según la elección del botón de radio. Ten en cuenta que la función switch() se utiliza para elegir la salida correspondiente en función del valor de entrada, "preview", "summary" o "str".

Comments are closed.