tabsetpanel r tabpanel shiny

r - tabsetpanel - shiny tabs



R Shiny: agrega tabPanel a tabsetPanel dinĂ¡micamente(con el uso de renderUI) (2)

Estoy desarrollando una aplicación brillante en la que utilizo tabsetPanel , que se genera cuando el usuario ingresa alguna entrada particular. Por lo tanto, quiero usar la función renderUI para hacer que tabsetPanel aparezca / desaparezca.

Mi problema ahora es que la cantidad de elementos tabPanel (argumentos de tabsetPanel ) también depende de la entrada del usuario , por cierto: a veces necesito 1 uno, otras veces quiero más tabPanels .

¿Como hacerlo? Intenté incluir conditionPanel o incluir la conditionPanel if()... simple en el argumento tabsetPanel , pero (no sorprendentemente ...) no funcionó.


Aqui tienes. El código es bastante auto explicativo.

library(shiny) runApp(list( ui = pageWithSidebar( headerPanel(''Dynamic Tabs''), sidebarPanel( numericInput("nTabs", ''No. of Tabs'', 5) ), mainPanel( uiOutput(''mytabs'') ) ), server = function(input, output, session){ output$mytabs = renderUI({ nTabs = input$nTabs myTabs = lapply(paste(''Tab'', 1: nTabs), tabPanel) do.call(tabsetPanel, myTabs) }) } ))


Hay una forma de agregar tabPanels dinámicamente sin renderUI, que puede no ser tan obvio como la versión con renderUI. Escribí una función addTabToTabset que agregará cualquier (lista de) tabPanel (s) a un conjunto de pestañas / barra de navegación.

Este enfoque tiene una serie de ventajas sobre el uso de renderUI:

  • Los tabPanels existentes no se vuelven a generar cada vez que se agrega un nuevo panel. (Más rápido)
  • Por lo tanto, no restablecer todas las variables de entrada dentro de los paneles existentes. (no es necesario almacenar soluciones variables)
  • La estructura del contenido del panel se puede elegir individualmente. (En la versión de lapply - renderUI, todos los paneles deben ser algo uniformes).

La solución y el ejemplo de código se pueden encontrar en la respuesta here . Si se solicita, también podría publicar el código aquí.