在 flexdashboard 闪亮的应用程序中使输入具有反应性

时间:2021-02-22 19:28:36

标签: r shiny flexdashboard

我试图在 flexdashboard 闪亮应用中使输入对另一个输入产生反应。

这是 df 示例:

> dat = data.frame(id = LETTERS[1:10],g1 = c(rep(24,5),rep(35,5)),g2 = c(2401,2401,2402,2402,2403,3501,3501,3502,3503,3503),val = seq(from = 10, to = 100, by = 10))
> dat
   id g1   g2 val
1   A 24 2401  10
2   B 24 2401  20
3   C 24 2402  30
4   D 24 2402  40
5   E 24 2403  50
6   F 35 3501  60
7   G 35 3501  70
8   H 35 3502  80
9   I 35 3503  90
10  J 35 3503 100

创建简单的反应集:

dat_r <- reactive({
    out = dat %>% filter(g1 == input$g1, g2 == input$g2)
    return(out)
})

为应用创建输入:

shinyWidgets::pickerInput('g1','Select g1',choices = unique(dat$g1),
                          options = list(`actions-box` = T), multiple = T, selected = 24)
shinyWidgets::pickerInput('g2','Select g2',choices = unique(dat$g2),
                          options = list(`actions-box` = T), multiple = T, selected = 2401)

创建输出:

renderDataTable(dat_r())

这给出了: enter image description here

我的问题是,如果我在 g1 中选择 24,我想要的 g2 中唯一的选项以 24 开头,如果我选择 35,我想要的唯一选项以 35 开头,我该怎么做?

谢谢

1 个答案:

答案 0 :(得分:0)

在 Shiny 中,您不能以这种方式操作 UI 元素。如果您希望能够动态更改输入的选项,可能的方法之一如下:

在 UI 中而不是所需的小部件包括 UIOutput 例如:

ui <- shiny::fluidPage(
     UIOutput("picker1"),
     UIOutput("picker2")
)

然后在服务器中您可以定义以下类型的函数:

server <- function(input, output, session) {
     output$picker1 <- shiny::renderUI({
         shinyWidgets::pickerInput('g1', 'Select g1', choices = unique (dat$g1), options = list(`actions-box` = T), multiple = T, selected = 24)
    })

     output$picker2 <- shiny::renderUI({
         shinyWidgets::pickerInput('g2', 'Select g2', choices = unique (dat$g2),
                           options = list(`actions-box` = T), multiple = T, selected = 2401)
     })
}