我正在尝试在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")) })
答案 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则选择嗯哼哼。
**如果您使用updateSelectInput
或observeEvent
等,只是为了合并,它应该放在服务器中,而不是放在ui中。