首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的内联uiOutput

R中的内联uiOutput
EN

Stack Overflow用户
提问于 2018-02-05 20:32:00
回答 2查看 2.9K关注 0票数 2

我试图根据用户的selectInputs生成一个序列。现在的问题是序列的布局是垂直的。我的问题是如何将它们水平或内联地对齐。我试图将uiOutput设置为inline=TRUE,但它没有像预期的那样工作。以前,有一个类似的问题是关于(https://groups.google.com/forum/#!searchin/shiny-discuss/inline$20uioutput%7Csort:date/shiny-discuss/WD9jh_mHArM/_bYFR_MVBgAJ),代码的google的,在我的例子中,它使用稍微不同的用户界面作为添加/删除字母。

代码语言:javascript
复制
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))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-05 22:50:55

我建议在CSS中使用display: inline-block来内联div。由于不能真正自定义外部selectInput div,所以可以将其包装在新的div中,如

代码语言:javascript
复制
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更好,特别是如果您想要自定义其他属性,如边距、宽度等。

票数 3
EN

Stack Overflow用户

发布于 2018-02-05 20:57:28

这里有一个可能的解决方案,我们只需将selectInput元素封装在列中:

代码语言:javascript
复制
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))

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48630983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档