如果选择了每个选项,则仅在Shiny中过滤

时间:2017-12-17 16:42:39

标签: r shiny

我终于找到了如何让情节对用户输入作出反应......不幸的是,用户需要选择年份范围,高尔夫球手和球场。我希望他们只能按年和高尔夫球手进行过滤,或者只需要年份和球场进行过滤即可。我如何修复我的代码,以便即使没有填写某些内容也会返回该图?任何帮助将不胜感激,因为我还是很新的!谢谢!

定义绘制直方图所需的服务器逻辑

    server <- function(input, output, session) {

    updateSelectizeInput(session, inputId = 'golfer', choices = dkDatabase$Golfer, selected = "Woodland, Gary", server = TRUE)
    updateSelectizeInput(session, inputId = 'course', choices = dkDatabase$Course, server = TRUE)

    output$points <- renderPlot({
    dkDatabase %>%
    filter(dkDatabase$Year >= input$year[1],
         dkDatabase$Year <= input$year[2],
         dkDatabase$Golfer == input$golfer,
         dkDatabase$Course == input$course) %>%
    ggplot(aes(dkPoints)) + geom_histogram(fill="green", colour = "black") +
    xlab("DK Points") +
    ylab("Events")
  })
}

1 个答案:

答案 0 :(得分:0)

如果没有看到更多的代码,我无法真正测试它,但它应该可以进行一些小的修改。

在ui代码中,设置默认选择输入:

selectInput(..., Choose = '')

然后在你的服务器端代码中添加一个if语句(如果你要使用单引号,双引号或者对所有这些语句进行空值测试,并且1应该有效,则无法回想起我的头脑。)< / p>

if (input$golfer == '') {
dkDatabase %>% 
filter(dkDatabase$Year >= input$year[1],
         dkDatabase$Year <= input$year[2], 
         dkDatabase$Course == input$course)
} 
else if (input$Course == ''){
dkDatabase %>%
filter(dkDatabase$Year >= input$year[1],
         dkDatabase$Year <= input$year[2], 
         dkDatabase$Golfer == input$golfer)
}
else {
dkDatabase %>%
    filter(dkDatabase$Year >= input$year[1],
         dkDatabase$Year <= input$year[2], 
         dkDatabase$Golfer == input$golfer,
         dkDatabase$Course == input$course)
}

output$points <- renderPlot({
    ggplot(aes(dkPoints())) + geom_histogram(fill="green", colour = "black") +
    xlab("DK Points") +
    ylab("Events")
  })

如果没有在上面输入年份,我没有说明要做什么,但我要做的是自动设置开始和结束日期以包含所有数据,然后用户可以根据需要进行更改。