我正在尝试在Shiny上制作一个显示反应性雷达图的仪表板。
对于我的输入,用户首先从团队列表中选择一个团队。然后,下一个下拉菜单将根据所选团队更新球员列表。
一旦用户也选择了玩家,就会从数据集中获取其属性的子集,并显示其属性的雷达图。
该图表对于来自同一团队的任何球员都显示流畅。但是,当我选择另一支球队时,就像一秒钟的时间,在此之前,球员列表仍然具有旧球队列表,然后才进行更新。
在随后的那段时间里,由于团队和球员不匹配,因此子集中没有数据。因此,我收到一条错误消息,但计算完成后立即显示正确的图。那么如何在绘图显示之前增加一到两秒的延迟?
#Select team
output$t <- renderUI({
selectInput(inputId = "x", choices = as.character(unique(d$team)))
})
#Select player
output$p <- renderUI({
d1 = d[d$team == input$x, "player"]
selectInput(inputId = "y", choices = unique(d1))
})
#Plot
output$r <- renderPlot({
rating <- (subset(x = d, d$team == input$x & d$player == input$y))[,c("F1","F2")]
radarchart(df = rating)
})
答案 0 :(得分:0)
Aditya,
对于以后的问题,请提供一个可执行的最小示例,以获取更好的答案。 (https://stackoverflow.com/help/mcve)尝试在下面修改的代码。 req()
功能将帮助您解决问题。
#Select team
output$t <- renderUI({
selectInput(inputId = "x", choices = as.character(unique(d$team)))
})
#Select player
output$p <- renderUI({
d1 = d[d$team == input$x, "player"]
selectInput(inputId = "y", choices = unique(d1))
})
#Plot
output$r <- renderPlot({
rating <- (subset(x = d, d$team == input$x & d$player == input$y))[,c("F1","F2")]
req(nrow(rating) > 0) # Only proceed to the next line if rating is not empty
radarchart(df = rating)
})
希望这会有所帮助。
Jason