В следующем минимальном примере, обратите внимание, что в то время как линия file.choose()
закомментирована, код работает, как ожидалось: нажав кнопку OK на Input закладок переключателей на Результаты табла.updateTabsetPanel сейчас, без задержки
Однако раскоментируйте строку file.choose()
и функцию updateTabsetPanel()
больше не работает. Есть ли способ, чтобы вкладка изменилась на экране до начала file.choose()
?
ui <- fluidPage(fluidRow(
tabsetPanel(id="main",
tabPanel("Input", actionButton("okButton", "OK")),
tabPanel("Results", h3(textOutput("results")))
)))
server <-function(input, output, session) {
output$results = renderText("Results Tab")
observeEvent(input$okButton, {
updateTabsetPanel(session, "main", "Results")
# file.choose()
})
}
shinyApp(ui = ui, server = server)
Это отлично работает для этого минимального примера, но в более крупном проекте я уже наблюдаю за событиями меню табуляции и использую их для чего-то другого. Я полагаю, что в этом случае я мог бы установить какой-то флаг, который будет путешествовать по этим событиям, но я действительно надеялся на какую-то команду, чтобы установить между updateTabsetPanel() и file.choose(), которые сказали Shiny I ' d ждут здесь, чтобы очистить свои ожидающие задачи. (В реальном приложении есть долгая задача с несколькими индикаторами выполнения после файла file.choose()) – 3D0G
Это не представляется возможным. Когда вы добавляете несколько команд в реактивную команду, результаты всегда возвращают одно и то же время, за исключением того, что вы используете Javascript или вызываете другой R-процесс посередине. –
Подумайте, ваше решение - это единственная возможность. В противном случае updateTabsetPanel() запустит другой элемент registerEvent() (для вкладки), пока я все еще посередине этого. Спасибо, что помогли мне продумать это. Я думаю, что я просто сохраню все данные, которые мне нужны в первом элементе наблюдения(), и у меня есть другая кнопка registerEvent(), которая инициирует всю обработку на основе сохраненных данных. – 3D0G