在Shiny

时间:2018-12-06 22:34:27

标签: r shiny

我想在线进行几组输入,但我不知道提前多少。我见过所有类似的问题,但无济于事。 我的代码是这样的:

library(shiny)

ui <- fluidPage(
    tags$head(
        tags$style(type="text/css", ".inline label{ display: table-cell; text-align: left; vertical-align: middle; } 
                   .inline .form-group{display: table-row;}")
        ),
    uiOutput("out")
)

server <- function(input, output){
    set.seed(1543)
    num <- 1:runif(1, 1, 6)

    show <- function(i){
        tagList(
            numericInput(i, paste(c(1:i), collapse = ""), value = 0),
            selectInput(paste("text", i), "", choices = c("min", "max"))
        )
    }

    output$out <- renderUI({
        tags$div(class = "inline", 
                 lapply(num, function (i) {
                     show(i)
                 })
        )
    })
}

shinyApp(ui = ui, server = server)

因此,当“ num”是随机的时,我试图为每个“ num”进行两个输入。但是selectInput出现在新行中。

如何为每个数字写一行(label-numericInput-selectInput)? 注意:每行的标签可以有不同的长度,因此框应正确对齐。

非常感谢!

1 个答案:

答案 0 :(得分:0)

最简单的方法是在输入中添加style = "display: inline-block;vertical-align:top;",并在末尾添加换行符。

library(shiny)

ui <- fluidPage(
  tags$head(
    tags$style(type="text/css", ".inline label{ display: table-cell; text-align: left; vertical-align: middle; } 
                   .inline .form-group{display: table-row;}")
  ),
  uiOutput("out")
)

server <- function(input, output){
  set.seed(1543)
  num <- 1:runif(1, 1, 6)

  show <- function(i){
    tagList(
      div(numericInput(i, paste(i), value = 0), style = "display: inline-block;vertical-align:top;"),
      div(selectInput(paste("text", i), "", choices = c("min", "max")), style = "display: inline-block;vertical-align:top;"),
      br()
    )
  }

  output$out <- renderUI({
    tags$div(class = "inline", 
             lapply(num, function (i) {
               show(i)
             })
    )
  })
}

shinyApp(ui = ui, server = server)