Можно ли задержать вывод renderPlot на несколько секунд, пока не будут рассчитаны все реактивные подмножества? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь создать приборную панель в 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 голосов
/ 10 апреля 2019

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)
})

Надеюсь, это поможет.

Джейсон

...