2

我正在尝试根据用户的 selectInputs 生成一个序列。现在的问题是序列的布局是垂直的。我的问题是如何将它们水平或内联对齐。我尝试将 uiOutput 设置为 inline=TRUE,但它没有按预期工作。之前在闪亮的谷歌小组上用代码提出了一个类似的问题(https://groups.google.com/forum/#!searchin/shiny-discuss/inline $20uioutput%7Csort:date/shiny-discuss/WD9jh_mHArM/_bYFR_MVBgAJ) ,在我的情况下,它使用稍微不同的用户界面作为添加/删除字母。

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))
4

2 回答 2

3

这是一种可能的解决方案,我们只需将selectInput元素包装在列中:

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) {
      column(width=2,
          selectInput(inputId = paste0("letter", i),
                  label = NULL,
                  choices = sequence))
    })

  })

}

runApp(list(ui=ui, server=server))

在此处输入图像描述


希望这可以帮助!

于 2018-02-05T20:57:28.680 回答
3

我建议display: inline-block在 CSS 中使用内联 div。由于您无法真正自定义外部selectInputdiv,因此您可以将其包装在一个新的 div 中,例如

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))

样式表可能比这里的内联 CSS 更好,特别是如果您想自定义其他属性,如边距、宽度等。

于 2018-02-05T22:50:55.690 回答