首页 > 解决方案 > knnx.index() 函数返回 Data:non-numeric in r on r shiny webapp

问题描述

我正在 r 闪亮的平台上构建一个 webapp。我让用户选择一名足球运动员,并试图让输出显示另外 10 名具有相似属性的球员。我为选定的球员数据创建了一个子集,为未选定的球员创建了另一个子集。在我到达 knnx.index() 之前,一切都运行无错误,我试图在其中找到属性最接近所选玩家的 10 个玩家。然而,每次我这样做时,我都会收到错误:数据非数字。我检查了子集是否正确制作并且 rbind 是否正常工作并且一切正常。该错误似乎源于 knnx.index() 函数。

请,任何帮助将不胜感激!这是我的代码:

function(input, output, session) {
   
     selectedData1 <- reactive({
       
       filter(data,data$player != input$player)
     })
     
     
    selectedData2 <- reactive({
      selectedData1() %>%
        select(10,15,11,6,5,19,29,61,35,40,47,55,62,60) #%>%
        filter(league %in% input$league) %>%
        filter(Age >= input$age[1]) %>%
        filter(Age <= input$age[2]) %>%
        filter(Min >= input$minutes[1])  %>%
        filter(Min <= input$minutes[2])
    })
    
    selectedData3 <- reactive({
      data %>%
        select(10,15,11,6,5,19,29,61,35,40,47,55,62,60) %>%
        filter(data$player == input$player)

    })

    selectedData4 <- reactive({
      rbind(selectedData3(),selectedData2())

    })

    selectedData5 <- reactive({
      selectedData4() %>%
      select(6:14)
    })

    selectedData6 <- reactive({
      as.numeric(knnx.index(selectedData5(), selectedData5()[1, , drop=FALSE], k=11))
    })

    selectedData7 <- reactive({
      selectedData4()[selectedData6(),]
    })

    selectedData8 <- reactive({
      selectedData7() %>%
        select(6:14)
    })


    # Combine the selected variables into a new data frame
  output$plot1 <- renderPlotly({

    validate(
      # need(dim(selectedData2())[1]>=10, "Sorry, no ten similar players were found.
      #      Please change the input filters."
      # )
       )

    plot_ly(
      type = 'scatterpolar',
      mode = "closest",
      fill = 'toself'
    ) %>%
      add_trace(
        r = as.matrix(selectedData8()[1,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        name = selectedData7()[1,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[2,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[2,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[3,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[3,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[4,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[4,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[5,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[5,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[6,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[6,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[7,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[7,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[8,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[8,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[9,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[9,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[10,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[10,1]
      ) %>%
      add_trace(
        r = as.matrix(selectedData8()[11,]),
        theta = c("TouchIndex","PassIndex","PostRecFwdPass","Creation","Team Attack","Total Disruption","Ball Winning","Individual Defending","TeamDefending"),
        showlegend = TRUE,
        mode = "markers",
        visible="legendonly",
        name = selectedData7()[11,1]
      ) %>%
      layout(
        polar = list(
          radialaxis = list(
            visible = T,
            range = c(0,100)
          )
       ),

     showlegend=TRUE


      )

   })
   
}
 
 
 

标签: rshinyknn

解决方案


推荐阅读