用于触发一系列闪亮动作的模式

时间:2017-07-06 20:35:03

标签: r shiny shiny-reactivity

我在Shiny app中创建一系列事件时遇到了麻烦。我知道还有其他方法来处理这个问题的部分(使用JS),还有不同的Shiny函数我可以用于类似的结尾(例如withProgress),但我想知道如何使这个工作具有反应性。

我希望实现的流程如下: 1)用户单击操作按钮,这导致A)开始耗时的计算和B)打印到UI的简单语句,让用户知道计算已经开始 2)一旦计算返回一个值,则触发对前一个文本输出的另一个更新,提醒用户计算完成

我已尝试使用操作按钮更新文本值,并在该值上设置观察者以开始计算(以便1B在1A之前运行),以确保消息不仅显示在UI一旦计算完成,但没有任何工作。这是我最近的尝试:

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

没有答案