I am trying to generate a sequence depending on the selectInputs by users. The problem now is that layout of the sequence is vertical. My question is how to align them horizontally or inline. I tried to set uiOutput as inline=TRUE, but it did not work as expected. A similar question was asked previously on shiny google group with the code (https://groups.google.com/forum/#!searchin/shiny-discuss/inline$20uioutput%7Csort:date/shiny-discuss/WD9jh_mHArM/_bYFR_MVBgAJ), and it used slightly different user interface as add/remove letter in my case.
library(shiny)
sequence <- letters[1:20]
ui <- fluidPage(
h2("Sequence Length:"),
fluidRow(column(width=10, numericInput("seqlen", label=NULL, value=10))),
h2("Sequence:"),
fluidRow(column(width=10, uiOutput("selects")))
)
server <- function(input, output){
output$selects <- renderUI({
len <- as.integer(input$seqlen)
lapply(1:len, function(i) {
selectInput(inputId = paste0("letter", i),
label = NULL,
choices = sequence,
width="15%")
})
})
}
runApp(list(ui=ui, server=server))
I'd recommend using display: inline-block in CSS to inline divs. Since you can't really customize the outer selectInput div, you could wrap it in a new div like
library(shiny)
sequence <- letters[1:20]
ui <- fluidPage(
h2("Sequence Length:"),
fluidRow(column(width=10, numericInput("seqlen", label=NULL, value=10))),
h2("Sequence:"),
fluidRow(column(width=10, uiOutput("selects")))
)
server <- function(input, output){
output$selects <- renderUI({
len <- as.integer(input$seqlen)
lapply(1:len, function(i) {
div(
selectInput(
inputId = paste0("letter", i),
label = NULL,
choices = sequence
),
style = "display: inline-block;"
)
})
})
}
runApp(list(ui=ui, server=server))
A stylesheet might be better than the inline CSS here, especially if you wanted to customize other properties like margin, width, etc.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With