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.

Separando fileInput de radioButtons en el código de shiny

Cuando ejecutes el código a continuación, notarás que tengo dos opciones a continuación. Si presionas la opción Excel, aparecerá un fileInput justo debajo de los radioButtons. Sin embargo, me gustaría saber si es posible separar fileInput de radioButtons. Insertaré una imagen para aclarar lo que quiero. Observa que están separados.

Código ejecutable a continuación:

library(shiny)
library(dplyr)
library(shinyjs)
library(shinythemes)
library(readxl)

ui <- fluidPage(

  shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                    br(),
                    tabPanel("PAGE1",
                             sidebarLayout(
                               sidebarPanel(
                                 radioButtons("button", 
                                              label = h3("Origen de datos"),
                                              choices = list("Excel" = "Excel",
                                                             "Base de datos" = "database"), 
                                              selected = "File"),
                                 uiOutput('fileInput'),

                               ),
                               mainPanel(

                               )))))



server <- function(input, output) {

  observe({
    if(is.null(input$button)) {

    }else if (input$button == "Excel"){

      output$fileInput <- renderUI({
        fileInput("file",h4("Importar archivo"), multiple = T, accept = ".xlsx")
      })

    } else if(input$button=="database"){

      output$fileInput <- NULL


    } else {
      output$fileInput <- NULL
    }


  })
}

shinyApp(ui = ui, server = server)

Ejemplo:
imagen

Lo dejé en rojo para especificar el espacio.
imagen

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible separar fileInput de radioButtons. Solo necesitas envolver fileInput y radioButtons en funciones separadas de column dentro de sidebarPanel. Aquí está el código modificado:

    ui <- fluidPage(
    
      shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                        br(),
                        tabPanel("PÁGINA1",
                                 sidebarLayout(
                                   sidebarPanel(
                                     column(width = 6,
                                            radioButtons("button", 
                                                         label = h3("Fuente de datos"),
                                                         choices = list("Excel" = "Excel",
                                                                        "Base de datos" = "database"), 
                                                         selected = "File")),
                                     column(width = 6,
                                            uiOutput('fileInput'))
                                   ),
                                   mainPanel(
    
                                   )))))
    
    server <- function(input, output) {
    
      observe({
        if(is.null(input$button)) {
    
        }else if (input$button =="Excel"){
    
          output$fileInput <- renderUI({
            fileInput("file",h4("Importar archivo"), multiple = T, accept = ".xlsx")
          })
    
        } else if(input$button=="database"){
    
          output$fileInput <- NULL
    
    
        } else {
          output$fileInput <- NULL
        }
    
    
      })
    
    }
    
    shinyApp(ui = ui, server = server)
    

    Y así es como se ve:

    fileInput y radioButtons separados

Comments are closed.