updateSelectInput with shiny within和Rmarkdown document

时间:2017-08-02 23:17:11

标签: r shiny r-markdown

我正在尝试在Rmarkdown文档中使用Shiny inline。在这个简单的例子中,我想创建3个输入:第一个允许您选择4个国家中的一个或多个(“GHA”,“RWA”,“TZA”,“UGA”)。在真实应用中,我希望景观选项根据所选国家/地区的实际景观进行更新。但是,在这个例子中,我只想要初始视图(默认选择“GHA”时)为“L01”到“L06”。然后,如果对“countries”输入进行任何更改,则横向选项将更改为(“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"))   })

1 个答案:

答案 0 :(得分: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...语句效果更好。详细说明代码表示,如果任何选择(在multiple = TRUE中设置selectInput)等于GHA,那么它会提供从L01到L02的选择,如果它不等于GHA则选择嗯哼哼。

**如果您使用updateSelectInputobserveEvent等,只是为了合并,它应该放在服务器中,而不是放在ui中。