【问题标题】:updateSelectInput with shiny within and Rmarkdown documentupdateSelectInput 带有闪亮的内部和 Rmarkdown 文档
【发布时间】:2018-01-10 08:43:46
【问题描述】:

我正在尝试在 Rmarkdown 文档中使用 Shiny 内联。在这个简单的示例中,我想创建 3 个输入:第一个允许您选择 4 个国家中的一个或多个(“GHA”、“RWA”、“TZA”、“UGA”)。在实际应用程序中,我希望根据所选国家/地区的实际景观更新景观选项。但是,在这个例子中,我只希望初始视图(默认选择“GHA”时)为“L01”到“L06”。然后,如果对“国家/地区”输入进行任何更改,横向选项将更改为 (“hmm”、“hum”)。我已经读过,在某些情况下,观察与反应选项可能是首选,并尝试了各种变体,但基本上每次我包含 updateSelectInput 命令时,我都会丢失应用程序中的任何景观选项。感谢您提供任何见解!

library(shiny)   
  selectInput("countries", 'Country',
                list("GHA","RWA","TZA","UGA"),
                multiple=TRUE, 
                selectize=TRUE, 
                selected="GHA")
  checkboxGroupInput("landscapes", label=("Landscape"), 
                choices=c("L01","L02","L03","L04","L05","L06"), selected="L01")   
  radioButtons("checkPlot", label = ("Factors"), 
                         choices=c("Gender of Household Head", "Water Source(s)"),
                         selected = "Water Source(s)")
  observeEvent(input$countries, {
    updateSelectInput(session, "landscapes", choices=c("hmm","hum"))   })

【问题讨论】:

    标签: r shiny r-markdown


    【解决方案1】:

    这是解决您的问题的示例代码:

    library(shiny)
    library(DT)
    shinyApp(
      ui = fluidPage(
        selectInput("countries", 'Country',
                    list("GHA","RWA","TZA","UGA"),
                    multiple=TRUE, 
                    selectize=TRUE, 
                    selected="GHA"),
        uiOutput("checkbox")
      ),
      server = function(input, output) {
    
        output$checkbox <- renderUI({
          choice <-  if(any(input$countries == "GHA")){
            choice <- c("L01","L02","L03","L04","L05","L06")
          }else{ 
            choice <- c("hmm","hum")}
          checkboxGroupInput("landscapes", label=("Landscape"), choices = choice, selected = choice[1])
    
        })
    
       }
    )
    

    我没有使用updateSelectInput,因为在这种情况下我认为if...else... 语句效果更好。详细地说,代码说如果任何选择(如您在selectInput 中设置的multiple = TRUE)等于GHA,那么它会提供从L01 到L02 的选择,如果它不等于GHA,那么选择是hmm 和hum .

    ** 如果您使用updateSelectInputobserveEvent 等,它应该放在服务器而不是用户界面中。

    【讨论】:

    • 谢谢,Mal_a!在 Rmarkdown 中,语法有点不同,并且您不使用服务器/用户界面的区别(据我了解),这就是为什么它们都在我的脚本中。不过,您的解决方案对我来说非常有用,只需通过删除这些行来修改 RMarkdown。
    • 添加,如下所示:renderUI({ sliderInput( "user_q", "My Value", min = 0, max = 10, step = 1, value = 5 ) })
    猜你喜欢
    • 2014-08-09
    • 2019-02-15
    • 1970-01-01
    • 2015-08-24
    • 2020-05-24
    • 2016-02-21
    • 2020-05-11
    • 1970-01-01
    • 2020-10-21
    相关资源
    最近更新 更多