【发布时间】:2017-06-17 01:31:03
【问题描述】:
我的应用运行良好,但我想添加一个选项,允许用户选择变量的所有值。 例如,对于第一个过滤器,我想要像“All”这样的东西,其中包括“A”、“B”和“C”。 和其他过滤器一样,我尝试了很多技巧,但我无法解决这个问题。 任何帮助将不胜感激
library(shiny)
library(DT)
library(dplyr)
VG <- c("A", "A", "B", "B", "B", "C", "A")
AG <- c(1, 2, 1, 3, 4, 2, 1)
AP <- letters[1:7]
AK <- paste(VG, AG, AP, sep = "-")
data <- data.frame(VG, AG, AP, AK)
ui <- fluidPage(
column(3,
selectInput("VG", label = h4("VG.ETD"), choices = unique(data$VG)),
selectInput("AG", label = h4("AG.ETD"), choices = unique(data$AG))),
column(3,
selectInput("AP", label = h4("AP.ETD"), choices = unique(data$AP)),
selectInput("AK", label = h4("AK.ETD"), choices = unique(data$AK)),
actionButton("go", "GO")),
column(6,DT::dataTableOutput("dtt"))
)
server<-function(input,output,session){
observeEvent(input$VG,{
updateSelectInput(session, 'AG', choices = unique(data$AG[data$VG %in% input$VG]))
})
observeEvent(c(input$VG, input$AG),{
updateSelectInput(session, 'AP', choices = unique(data$AP[data$AG %in% input$AG &
data$VG %in% input$VG]))
})
observeEvent(c(input$VG, input$AG, input$AP), {
updateSelectInput(session, 'AK', choices = unique(data$AK[data$AP %in% input$AP &
data$AG %in% input$AG &
data$VG %in% input$VG]))
})
df <- eventReactive(input$go, {
data %>% filter(VG %in% input$VG,
AG %in% input$AG,
AP %in% input$AP,
AK %in% input$AK)
})
output$dtt <- DT::renderDataTable({
df()
})
}
shinyApp(ui=ui,server=server)
【问题讨论】:
-
也许将选择更改为:c('All',unique(data$VG)),然后创建一个新的反应变量来查看该 selectinput 的输入。有一个 if 语句说 if(input$X == 'All'){c('A','B','C')}else{input$X}。然后将该反应变量传递给您的过滤器。还有一个 multiple = TRUE, selectinput 的参数,它允许用户选择多个选项。