I am developing a shiny application in which I use tabsetPanel
, which is generated when user enters some particular input. Thus, I want to use renderUI
function to make a tabsetPanel appear / disappear.
My struggle now is that number of tabPanel
elements (arguments of tabsetPanel
) also depends on user input, in the way: sometimes I need 1 one, other times I want more tabPanels
.
How to make it? I tried including conditionPanel
or including simple if()...
condition in the tabsetPanel
argument, but it (rather not surprisingly...) did not work.
Here you go. The code is fairly self explanatory.
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)
})
}
))