可以将renderPlot输出延迟几秒钟,直到计算出所有反应性子集吗?

时间:2019-04-10 02:59:09

标签: r shiny shinydashboard

我正在尝试在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)
})

1 个答案:

答案 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