Problem with Shiny app and filtering

i am pretty new to programmring but i have to make a shiny app for a university course.

I. As you can see i webscraped a data table thats presents different bike geometries and i wanted to create a shiny app, where i can compare the geometries with each other. I am quite happy with my progress, but now i got the problem that it always shows me the error: "Error in : Problem with filter() input ..1 . x Input ..1 must be of size 19 or 1, not size 0. i Input ..1 is !=... . 161: "


#table

Canyon <- read_html("https://enduro-mtb.com/canyon-strive-cfr-9-0-ltd-test-2020/")
Rose <- read_html("https://enduro-mtb.com/rose-root-miller-2020-test/")
Ghost <- read_html("https://enduro-mtb.com/ghost-riot-enduro-2021-erster-test/")
Cube <- read_html("https://enduro-mtb.com/cube-stereo-170-sl-29-test-2020/")


Comparison <- tibble(
  Geometry = Canyon %>%
    html_nodes(".geometry strong") %>%
    html_text()%>%
    str_trim(),
  CanyonStrive = Canyon %>%
    html_nodes("td:nth-child(3)") %>%
    html_text()%>%
    str_trim(),
  GhostRiot = Ghost %>%
    html_nodes("td:nth-child(3)") %>%
    html_text()%>%
    str_trim(),
   CubeStereo = Cube %>%
    html_nodes("td:nth-child(3)") %>%
    html_text()%>%
    str_trim(),
   RoseRootMiller = Rose %>%
    html_nodes("td:nth-child(3)") %>%
    html_text()%>%
    str_trim(),
)

ComparisonTable <- Comparison %>%
  mutate_all(~gsub("mm|°|-.*|/.*|\\.", "", .)) %>%
  mutate_all(~gsub(",", ".", .)) %>%
  mutate_all(type.convert, as.is=TRUE) %>% 
  gather("Bikes", "value", 2:ncol(Comparison)) %>% 
  spread(Geometry,value)


Art <- c("Enduro", "Enduro", "AllMountain", "Enduro")


ComparisonTableHallo <- ComparisonTable

ComparisonTableHallo$Art <- Art

# server

server <- function(input, output, session) {
 selectedData1 <- reactive({
      ComparisonTableHallo %>%
      filter(ComparisonTableHallo$Bikes != gsub("[[:space:]]*$","",gsub("- .*",'',input$Bikes))) 
    })
    
     
    
    selectedData2 <- reactive({
      selectedData1() %>%
        select(1:12) %>%
      filter(selectedData1()$Art %in% input$Art) 
    })
    
    selectedData3 <- reactive({
      ComparisonTableHallo  %>%
        select(1:12) %>%
        filter(ComparisonTableHallo$Bikes == gsub("[[:space:]]*$","",gsub("- .*",'',input$Bikes))) 
      
    })
    
    selectedData4 <- reactive({
      rbind(selectedData3(),selectedData2())
      
    })
    
    selectedData5 <- reactive({
      selectedData4() %>%
      select(3:11)
    })
    
    selectedData6 <- reactive({
    as.numeric(knnx.index(selectedData5(), selectedData5()[1, , drop=FALSE], k=2))
    })
    
    selectedData7 <- reactive({
      selectedData4()[selectedData6(),]
    })
    
    selectedData8 <- reactive({
      selectedData7() %>%
        select(3:11)
    })


    # Combine the selected variables into a new data frame
  output$plot1 <- renderPlotly({
    
    validate(
      need(dim(selectedData2())[1]>=2, "Sorry, no ten similar bikes were found. 
           Please change the input filters."
      )
      )

    plot_ly(
      type = 'scatterpolar',
      mode = "closest",
      fill = 'toself'
    ) %>%
      add_trace(
        r = as.matrix(selectedData8()[1,]),
        theta = c("Kettenstrebe", "Lenkwinkel","Oberrohr","Radstand","Reach","Sattelrohr","Sitzwinkel","Stack","Steuerrohr",
                  "Tretlagerabsenkung"),
        showlegend = TRUE,
        mode = "markers",
        name = selectedData7()[1,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[2,]),
        theta = c("Kettenstrebe","Lenkwinkel","Oberrohr","Radstand","Reach","Sattelrohr","Sitzwinkel","Stack","Steuerrohr",
                  "Tretlagerabsenkung"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[2,1]
      ) %>% 
      layout(
        polar = list(
          radialaxis = list(
            visible = T,
            range = c(0,100)
          )
       ),
     
     showlegend=TRUE
      
        
      )
    
  })
  
}

#shiny app

ui <- fluidPage(navbarPage("Bike Comparison",
           tabPanel("Graphic",fluidPage(theme = shinytheme("flatly")),
tags$head(
  tags$style(HTML(".shiny-output-error-validation{color: red;}"))),
pageWithSidebar(
  headerPanel('Apply filters'),
  sidebarPanel(width = 4,
    selectInput('Bike', 'Choose a Bike:',paste(ComparisonTableHallo$Bikes)),
      checkboxGroupInput(inputId = "Art",
                       label = 'Art:', choices = c("Enduro" = "Enduro", "AllMountain" = "AllMountain"
                                                        ), 
                       selected = c("Enduro" = "Enduro","AllMountain" = "AllMountain"),inline=TRUE),
   submitButton("Update filters")
  ),
  mainPanel(
    column(8, plotlyOutput("plot1", width = 800, height=700),
           p("To visualize the graph of the player, click the icon at side of names 
             in the graphic legend. It is worth noting that graphics will be overlapped.",
             style = "font-size:25px")
    
  )
  )
)))
)

shinyApp(ui = ui, server = server)

things to watch out for.
1)referring to input$Bikes when its input$Bike
2)using the name of the dataframe and $ sign along with variable name within a dplyr filter call to identify a variable to filter on from a dataframe, the plain name is sufficient given that you are filtering on a specific dataframe explicity and filter knows its columns.

Thanks i tried that, now i get another problem. It seems that i do something complete wrong and i do not now how to solve it. Thanks anyway

This topic was automatically closed 54 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.