简体   繁体   中英

How do I put a reactive subset of data into renderplot?

I am new to Shiny and have been trying to learn in my spare time. I have a dataframe of Fantasy Football statistics that I am trying to plot based on selectinput() 's and sliderbar() 's. I used renderprint() to ensure my inputs and correct when the slider's or selects are changed. I have the sliders and select inputs in a reactive() where I am simply subsetting the data. I am then feeding the reactive function into my ggplot() as the data. When trying to plot these graphs I am getting an "Error: object 'columnName' not found" , but for only some columns. Please help me find the source of this issue.

Best, Davis

Here is the code:

######################################################################
#------------------------Load libraries------------------------------#
######################################################################
library(shiny)
library(bslib)
library(shinydashboardPlus)
library(ggplot2)
library(shinyWidgets)
######################################################################
#------------------------Data import and Clean-----------------------#
######################################################################

FantFootDF <- read_excel("~/Desktop/Fantasy/2021 Fantasy Stats.xltx")
FantFootDF <- as.data.frame(FantFootDF)
colnames(FantFootDF) <- paste(FantFootDF[1,])
FantFootDF <- FantFootDF[-1,]
colnames(FantFootDF) <- c("Rk","Player","Team","FantPos","Age",
                         "G","GS","Cmp","PAtt","PYds","PTD",
                         "Int","RuAtt","RuYds","RuYA","RuTD",
                         "Rec","ReYds","ReYA","ReTD","Fmb","FL",
                         "TTD","2PM","2PP","FantPt","PPR","DKPt",
                         "FDPt","VBD","PosRank","OvRank")
FantFootDF[!is.na(FantFootDF$FantPos),]
NumColumns <- c("Rk","Age",
                "G","GS","Cmp","PAtt","PYds","PTD",
                "Int","RuAtt","RuYds","RuYA","RuTD",
                "Rec","ReYds","ReYA","ReTD","Fmb","FL",
                "TTD","2PM","2PP","FantPt","PPR","DKPt",
                "FDPt","VBD","PosRank","OvRank")
FantFootDF[NumColumns] <- lapply(FantFootDF[NumColumns], as.numeric)
FantFootDF[is.na(FantFootDF)] = 0
FinalDF <- FantFootDF



######################################################################
#------------------------User Interface------------------------------#
######################################################################
# Define UI for application that draws a histogram
ui <- fluidPage(

    # Application title
    titlePanel("Fantasy Football GUI"),
#Sidebar
    sidebarLayout(
        sidebarPanel(
          pickerInput("position",
                      "Position(s)",
                      choices = unique(FinalDF$FantPos),
                      options = list(`actions-box` = TRUE),
                      multiple = T),
          pickerInput("playername",
                      "Player Name",
                      choices = unique(FinalDF$Player),
                      options = list(`actions-box` = TRUE),
                      multiple = T),
          pickerInput("team",
                      "Team",
                      choices = unique(FinalDF$Team),
                      options = list(`actions-box` = TRUE),
                      multiple = T),
          sliderInput("age",
                      "Age",
                      min = min(FinalDF$Age),
                      max = max(FinalDF$Age),
                      value = c(min(FinalDF$Age), max(FinalDF$Age))),
          sliderInput("completions",
                      "Completions",
                      min = min(FinalDF$Cmp),
                      max = max(FinalDF$Cmp),
                      value = c(min(FinalDF$Cmp), max(FinalDF$Cmp))),
          sliderInput("Pattempts",
                      "Passing Attempts",
                      min = min(FinalDF$PAtt),
                      max = max(FinalDF$PAtt),
                      value = c(min(FinalDF$PAtt), max(FinalDF$PAtt))),
          sliderInput("Pyards",
                      "Passing Yards",
                      min = min(FinalDF$PYds),
                      max = max(FinalDF$PYds),
                      value = c(min(FinalDF$PYds), max(FinalDF$PYds))),
          sliderInput("Ptds",
                      "Passing TD's",
                      min = min(FinalDF$PTD),
                      max = max(FinalDF$PTD),
                      value = c(min(FinalDF$PTD), max(FinalDF$PTD))),
          sliderInput("RuAttempts",
                      "Rushing Attempts",
                      min = min(FinalDF$RuAtt),
                      max = max(FinalDF$RuAtt),
                      value = c(min(FinalDF$RuAtt), max(FinalDF$RuAtt))),
          sliderInput("RuYards",
                      "Rushing Yards",
                      min = min(FinalDF$RuYds),
                      max = max(FinalDF$RuYds),
                      value = c(min(FinalDF$RuYds), max(FinalDF$RuYds))),
          sliderInput("RuYperA",
                      "Yards per Rushing Attempt",
                      min = min(FinalDF$RuYA),
                      max = max(FinalDF$RuYA),
                      value = c(min(FinalDF$RuYA), max(FinalDF$RuYA))),
          sliderInput("RuTDs",
                      "Rushing TD's",
                      min = min(FinalDF$RuTD),
                      max = max(FinalDF$RuTD),
                      value = c(min(FinalDF$RuTD), max(FinalDF$RuTD))),
          sliderInput("rec",
                      "Receptions",
                      min = min(FinalDF$Rec),
                      max = max(FinalDF$Rec),
                      value = c(min(FinalDF$Rec), max(FinalDF$Rec))),
          sliderInput("ReYards",
                      "Receiving Yards",
                      min = min(FinalDF$ReYds),
                      max = max(FinalDF$ReYds),
                      value = c(min(FinalDF$ReYds), max(FinalDF$ReYds))),
          sliderInput("ReYperA",
                      "Yards per Reception",
                      min = min(FinalDF$ReYA),
                      max = max(FinalDF$ReYA),
                      value = c(min(FinalDF$ReYA), max(FinalDF$ReYA))),
          sliderInput("ReTDs",
                      "Receiving TD's",
                      min = min(FinalDF$ReTD),
                      max = max(FinalDF$ReTD),
                      value = c(min(FinalDF$ReTD), max(FinalDF$ReTD))),
          sliderInput("fumb",
                      "Fumbles",
                      min = min(FinalDF$Fmb),
                      max = max(FinalDF$Fmb),
                      value = c(min(FinalDF$Fmb), max(FinalDF$Fmb))),
          sliderInput("ppr",
                      "1 PPR Total Points",
                      min = min(FinalDF$PPR),
                      max = max(FinalDF$PPR),
                      value = c(min(FinalDF$PPR), max(FinalDF$PPR)))
            ),
#Main Panel
        mainPanel(
          selectInput("plottype",
                      "Which Plot",
                      choices = c("PPR by Player",
                                  "PPR by Team",
                                  "PPR by Age")),
          plotOutput("plot1"),
          tableOutput("table"),
          verbatimTextOutput("minmax")
        )
    )
)

######################################################################
#--------------------------------Server------------------------------#
######################################################################
server <- function(input, output) {
#Reactive to subset data and reduce size in graps
  df <- reactive({
    a = subset(FinalDF,
           FantPos = input$position,
           Player = input$playername,
           Team = input$team,
           Age >= input$age[1]            & Age <= input$age[2],
           Cmp >= input$completions[1]    & Cmp <= input$completions[2],
           PAtt >= input$Pattempts[1]     & PAtt <= input$Pattempts[2],
           PYds >= input$Pyards[1]        & PYds <= input$Pyards[2],
           PTD >= input$Ptds[1]           & PTD <= input$Ptds[2],
           RuYA >= input$RuYperA[1]       & RuYA <= input$RuYperA[2],
           RuAtt >= input$RuAttempts[1]   & RuAtt <= input$RuAttempts[2],
           RuYds >= input$RuYards[1]      & RuYds <= input$RuYards[2],
           RuTD >= input$RuTDs[1]         & RuTD <= input$RuTDs[2],
           Rec >= input$rec[1]            & Rec <= input$rec[2],
           ReYds >= input$ReYards[1]      & ReYds <= input$ReYards[2],
           ReYA >= input$ReYperA[1]       & ReYA <= input$ReYperA[2],
           ReTD >= input$ReTDs[1]         & ReTD <= input$ReTDs[2],
           Fmb >= input$fumb[1]           & Fmb <= input$fumb[2],
           PPR >= input$ppr[1]            & PPR <= input$ppr[2]
           )
    return(a)
})
  
#Plot
    output$plot1 <- renderPlot({
        # generate bins based on input$bins from ui.R

      if(input$plottype == "PPR by Player"){
      ggplot(data = df()) + 
        geom_point(data = df(),
                   aes(x = Player,
                       y = PPR,
                       color = FantPos)) +
        ggtitle("PPR Points") +
        xlab("Player") + 
        ylab("PPR Points")
        }
      else if(input$plottype == "PPR by Team"){
        ggplot(data = df()) + 
          geom_point(data = df(),
                     aes(x = Team,
                         y = PPR,
                         color = FantPos)) +
          ggtitle("PPR Points") +
          xlab("Player") + 
          ylab("PPR Points")
        }
     else if(input$plottype == "PPR by Age"){
       ggplot(data = df()) + 
        geom_point(data = df(),
                   aes(x = Age,
                       y = PPR,
                       color = FantPos)) +
        ggtitle("PPR Points") +
        xlab("Player") + 
        ylab("PPR Points")
    }
    })
    #Checking inputs
    output$minmax <- renderText(
      paste("age", input$age[1],  input$age[2], "\ncompletions =",
            input$completions[1],input$completions[2],"\nPattempts =",
            input$Pattempts[1],input$Pattempts[2],"\nPyards =",
            input$Pyards[1],input$Pyards[2],"\nPtds =",
            input$Ptds[1],input$Ptds[2],"\nRuYperA =",
            input$RuYperA[1],input$RuYperA[2],"\nRuAttempts =",
            input$RuAttempts[1],input$RuAttempts[2],"\nRuYards =",
            input$RuYards[1],input$RuYards[2],"\nRuTDs =",
            input$RuTDs[1],input$RuTDs[2],"\nrec =",
            input$rec[1],input$rec[2],"\nReYards =",
            input$ReYards[1],input$ReYards[2],"\nReYperA =",
            input$ReYperA[1],input$ReYperA[2],"\nReTDs =",
            input$ReTDs[1],input$ReTDs[2],"\nfumb =",
            input$fumb[1],input$fumb[2],"\nppr =",
            input$ppr[1], input$ppr[2])
    )
    }

# Run the application 
shinyApp(ui = ui, server = server)

My apologies. I will be sure to include a reproducible example next time. I replicated the code by making a smaller DataFrame. The replicated code and it worked, so I had another look at my original data. There was a column that was NA at the end. When renaming the columns I forgot the index at the end. I also changed from subset to filter. Not sure why the last column with no name messed everything up, but the shiny ran how I wanted after those changes.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM