【问题标题】:RStudio Shiny dynamic selectizeRStudio闪亮动态选择
【发布时间】:2015-01-15 21:10:27
【问题描述】:

在我的 RStudio Shiny 中,我的 selectInput 在我的 server.R 中,在 ui.R 上我得到了一个 tags 语句来更改选择框的宽度和高度。

加载页面时它可以工作,但是当我进入单一类型时它会恢复为默认大小。任何想法如何解决它?

在ui.R上

# [...]
  ,div(class="span6"
   ,radioButtons("viz_multiple", "Select Type:",
          c("Select From List (can use Up/Down + Enter)" = "multiple",
            "Search One (Delete then type keyword)"  = "single")
    )
   )
  )
  ,div(class='row-fluid'
  ,div(class='span12', uiOutput("image_list"))
  ,tags$head(tags$style(type="text/css", "select#iimage_list             { width: 1000px; height: 40px; }"))
  )
 # [...]

在服务器上。R

# [...]

output$image_list <- renderUI({
  imagelist = image_ls()
  iimage_list <- as.vector(sort(unique(as.character(imagelist)),decreasing=TRUE))
  length_list = length(iimage_list)
  selectInput("iimage_list",paste0("samples (",length_list,")"),choices=iimage_list, selectize = input$viz_multiple == 'single')
})
# [...]

当用户从multiple 切换到single 时,任何想法如何应用tags 命令?

【问题讨论】:

    标签: r shiny rstudio


    【解决方案1】:

    您还需要动态添加 css。要定位选择输入,您需要定位 select#dataset + .selectize-control 而不是 select#dataset

    图书馆(闪亮)

    runApp(list(
      ui = bootstrapPage(
        radioButtons("viz_multiple", "Select Type:",
                     c("Select From List (can use Up/Down + Enter)" = "multiple",
                       "Search One (Delete then type keyword)"  = "single")
        )
        , uiOutput("myUI")
      ),
      server = function(input, output){
        output$myUI <- renderUI({
          myCSS <-if(input$viz_multiple == 'single'){
            tags$style(type="text/css", "select#dataset + .selectize-control{ width: 1000px; height: 40px; }")
          }else{
            tags$style(type="text/css", "select#dataset { width: 1000px; height: 40px; }")
          }
          tagList(
            selectInput('dataset', 'Choose Dataset', c('mtcars', 'iris'), selectize = (input$viz_multiple == 'single'))
            , myCSS
          )
        })
      }
    ))
    

    或者有两个单独的 CSS 条目,一个用于 select,一个用于 selectize

    library(shiny)
    runApp(list(
      ui = bootstrapPage(
        radioButtons("viz_multiple", "Select Type:",
                     c("Select From List (can use Up/Down + Enter)" = "multiple",
                       "Search One (Delete then type keyword)"  = "single")
        )
        , uiOutput("myUI")
        , tags$style(type="text/css", "select#dataset + .selectize-control{ width: 1000px; height: 40px; }")
        , tags$style(type="text/css", "select#dataset { width: 1000px; height: 40px; }")
      ),
      server = function(input, output){
        output$myUI <- renderUI({
          selectInput('dataset', 'Choose Dataset', c('mtcars', 'iris'), selectize = (input$viz_multiple == 'single'))
        })
      }
    ))
    

    【讨论】:

    • 我复制并粘贴了这个新版本,但它的行为与原始版本没有什么不同。如果我删除ui.R 中相应的tags 语句,并在您的答案中使用新版本,同样的行为......
    • 您需要提供可重现的代码,否则很难进一步评论。
    • 在加载带有您答案中的版本的页面时,它确实将其调整为正确的大小,这让我认为它正在正确应用 tagList。但是当我更改加载页面中的input$viz_multiple 选项时,它会恢复到默认大小...
    猜你喜欢
    • 2014-09-02
    • 2014-10-25
    • 2016-11-21
    • 2019-06-14
    • 2016-12-25
    • 2019-02-12
    • 2017-06-23
    • 2018-03-17
    相关资源
    最近更新 更多