Шаблон для запуска серии блестящих действий

У меня проблемы с созданием последовательности событий в приложении Shiny. Я знаю, что есть другие способы обработки частей этой проблемы (с помощью JS), а также различные функции Shiny, которые я мог бы использовать для аналогичной цели (например, withProgress), но я хотел бы понять, как заставить это работать с реактивностью.

Поток, которого я надеюсь достичь, выглядит следующим образом: 1) пользователь нажимает кнопку действия, что приводит к тому, что A) начинается трудоемкое вычисление и B) простая инструкция для печати в пользовательском интерфейсе, позволяющая пользователю узнать, что вычисление началось 2) один раз вычисление возвращает значение, вызывает другое обновление предыдущего текстового вывода, предупреждая пользователя о завершении расчета

Я экспериментировал с использованием кнопки действия для обновления текстового значения и установки наблюдателя на это значение, чтобы начать вычисление (чтобы 1B работал до 1A), чтобы гарантировать, что сообщение не отображается только в пользовательском интерфейсе после Расчет завершен, но не получил ничего, чтобы работать. Вот моя последняя попытка:

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      actionButton("run", "Pull Data")
    mainPanel(
      textOutput("status")
    )
  )
)


server <- function(input, output, session) {

  # slow function for demonstration purposes...
  test.function <- function() {
    for(i in seq(5)) {
      print(i)
      Sys.sleep(i)
    }
    data.frame(a=c(1,2,3))
  }

  report <- reactiveValues(
    status = NULL,
    data = NULL
    )

  observeEvent(input$run, {
    report$status <- "Pulling data..."
  })

  observeEvent(report$status == "Pulling data...", {
      report$data <- test.function()
  })

  observeEvent(is.data.frame(report$data), {
      report$status <- "Data pull complete"
    }
  )

  observe({
    output$status <- renderText({report$status})
  })
}

В конце концов, я надеюсь встроить это в более длительный цикл вычислений + пользовательский ввод, поэтому я надеюсь найти хороший образец наблюдателей + реактивных элементов, чтобы справиться с таким продолжающимся взаимодействием. Любая помощь приветствуется!

0 ответов

Другие вопросы по тегам