You could handle generation of the UI element in server.R
, so you have something like:
ui.R
----
shinyUI( pageWithSideBar(
...
selectInput("numIndividuals", ...)
uiOutput("sliders"),
...
))
and
server.R
--------
shinyServer( function(input, output, session) {
output$sliders <- renderUI({
numIndividuals <- as.integer(input$numIndividuals)
lapply(1:numIndividuals, function(i) {
sliderInput(...)
})
})
})
When I have UI elements that depend on values from other UI elements, I find it easiest to generate them in server.R
.
It’s useful to understand that all of the _Input
functions just generate HTML. When you want to generate that HTML dynamically it makes sense to move it to server.R
. And perhaps the other thing worth emphasizing is that it’s okay to return a list
of HTML ‘elements’ in a renderUI
call.