我有这个shiny
应用,我希望使用一组radioBuottons
来确定另一组radioBuottons
的选择向量。我尝试过使用conditionalPanel
,但我无法弄清楚如何将不同的radioBuottons
集合绑定到单个输出条目(如果可能的话)。
所以我想出了为第二组radioBuottons
定义一个列表,并尝试根据第一组radioBuottons
的选择来选择它们。
以下是代码示例:
ui.r:
library(shiny)
secondInput <- list(
"a" = c("one", "two", "three"),
"b" = c("four", "five")
)
shinyUI(fluidPage(
titlePanel("Test reactive RadioButtons"),
column(4,
radioButtons("input1", label = "1st input", choices = c("a","b"))),
column(4,
radioButtons("input2", label = "2nd input depend on 1st input", choices = secondInput[[input$input1]])),
column(4,
textOutput("IN1"))
))
server.r:
library(shiny)
shinyServer(function(input, output) {
out <- reactive(input$input1)
output$IN1 <- renderText(out())
})
我收到一条错误消息,说明该对象已输入&#39;没找到。 我该如何管理?
答案 0 :(得分:2)
我认为updateRadioButtons
会更好,因为每次input1
更改都不需要重新创建小部件
library(shiny)
secondInput <- list(
"a" = c("one", "two", "three"),
"b" = c("four", "five")
)
ui <- fluidPage(
titlePanel("Test reactive RadioButtons"),
column(4,radioButtons("input1", label = "1st input", choices = c("a","b"))),
column(4,radioButtons("input2", label = "2nd input depend on 1st input", choices = "")),
column(4,textOutput("IN1"))
)
# Define server logic
server <- function(input, output, session) {
observeEvent(input$input1,{
updateRadioButtons(session,"input2",choices = secondInput[[input$input1]])
})
out <- reactive(input$input1)
output$IN1 <- renderText(out())
}
# Run the application
shinyApp(ui = ui, server = server)
答案 1 :(得分:1)
您生成的radioButtons
不是被动的。如果要使用一个输入来创建依赖于它的另一个输入或输出,则必须在服务器中的反应式表达式中为其构建逻辑。您可以使用uiOutput
和renderUI
。下面给出一个工作实例,希望这有帮助!
library(shiny)
secondInput <- list(
"a" = c("one", "two", "three"),
"b" = c("four", "five")
)
ui <- fluidPage(
radioButtons("input1", label = "1st input", choices = c("a","b")),
uiOutput('radiobuttons2')
)
server <- function(input, output, session) {
output$radiobuttons2 <- renderUI({
radioButtons('input2',label='2nd input', choices = secondInput[[input$input1]])
})
}
shinyApp(ui, server)