闪亮 - 复选框和过滤数据的问题

时间:2016-10-11 12:10:27

标签: r shiny

我已经开始学习Shiny尝试开发一些不错的简单界面,并且由于修改了https://gist.github.com/4211337处找到的一些代码,我设法将下面的第一个接口放在一起。< / p>

我使用的代码如下:

library(shiny)
library(DT)

schedule<-read.csv("NBA_Schedule.csv")
stats<-read.csv("2015_2016_Stats.csv")

data_sets<-unique(schedule$Date)
data_sets<-as.character(data_sets)

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

  output$choose_dataset <- renderUI({
    selectInput("dataset", "Game Date (US Time)", as.list(data_sets))
  })

  output$choose_columns <- renderUI({
    if(is.null(input$dataset))
      return()

    schedule_subset<-schedule[  schedule$Date %in% input$dataset, ]
    schedule_subset$Game<-as.character(schedule_subset$Game)

    checkboxGroupInput("columns", "Choose Games to Include", 
                       choices  = schedule_subset$Game,
                       selected = schedule_subset$Game)
  })

  output$data_table <- DT::renderDataTable({
    if(is.null(input$dataset))
      return()

    schedule_subset<-schedule[  schedule$Date %in% input$dataset, ]
    teams_selected <- c(as.character(schedule_subset$VIS[schedule_subset$Game==input$columns]),as.character(schedule_subset$HOM[schedule_subset$Game==input$columns]))

    if (is.null(input$columns))
      return()

    stats<-stats[  stats$Tm %in% teams_selected, ]

    stats
  })
})

ui<-shinyUI(pageWithSidebar(

  headerPanel("2016/2017 NBA DFS (Draftstars & Moneyball) Data Summary"),

  sidebarPanel(
    uiOutput("choose_dataset"),

    uiOutput("choose_columns"),
br(),
a(href = "https://gist.github.com/4211337", "Original source code")
  ),

  mainPanel(
    DT::dataTableOutput("data_table")
  )
))

shinyApp(ui = ui, server = server)

启动后,我得到以下界面,我不会遇到问题:

Interface on Startup

现在,代码的功能应该包括此表中的团队,只有当玩家为选择了他们的复选框的球队进行比赛时。所以在启动时我们目前有5,463个条目是完全正确的。

然而,一旦我开始取消框,等表格数据开始返回有趣的数字。如果我单独选择方框,那么表格中会出现正确的行数,即尼克斯对骑士队的1767,马刺对阵勇士队的1913和爵士对阵开拓者的1783。但是,如果我只选择底部的两个匹配项,那么该表将不返回任何结果:

Incorrectly Showing No Results

或者,如果我选择第一场和最后一场比赛,那么我只能得到尼克斯对骑士队的1767分。

Incorrect Results

复选框选择的其他组合会产生类似的错误结果。

如果有人能在我的代码中找到错误来尝试解决此问题以便我可以继续前进,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

这会解决问题吗?我可以重现它,现在它似乎显示正确的结果。

  output$data_table <- DT::renderDataTable({
    if(is.null(input$dataset))
      return()
    schedule_subset<-schedule[  schedule$Date %in% input$dataset, ]
    teams_selected <- c(as.character(schedule_subset$VIS[schedule_subset$Game %in% input$columns]),
                        as.character(schedule_subset$HOM[schedule_subset$Game %in% input$columns]))
    if (is.null(input$columns))
      return()
    stats_subset<-stats[  stats$Tm %in% teams_selected, ]
    stats_subset
  })

这些问题似乎是由以下原因造成的:

  • 不准确的子集标准(正确:schedule_subset$Game %in% input$columns
  • 错误的数据操作 (正确:stats_subset<-stats[stats$Tm %in% teams_selected,])。