我试图在 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())
我的问题是,如果我在 g1 中选择 24,我想要的 g2 中唯一的选项以 24 开头,如果我选择 35,我想要的唯一选项以 35 开头,我该怎么做?
谢谢
答案 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)
})
}