抑制submitButton对启动闪亮应用

时间:2017-02-21 15:57:59

标签: r shiny

我有一个闪亮的应用程序,其中包含一个用于过滤数据的反应位。然后我使用数据进行绘图。我的UI反应位检查变量的所有可能值,将它们作为selectizeInput中的选项提供,并从所选的所有选项开始。在我的实际应用中,过滤器中的更改可能需要相当长的时间才能运行,因此我submitButton会阻止应用不断更新。唯一的问题是应用程序的初始启动:它将选择加载到动态UI并选择它们,但由于submitButton阻止了进一步的反应,此信息无法到达情节,所以它显示了一个空的情节。获得所需结果所需的所有内容都会被sumbitButton点击一次。完成此操作后,应用程序将按需运行。

我正在寻找一种方法来初步显示情节,而不必按submitButton。在我的下面的玩具示例中,可以通过将submitButton替换为actionButton来轻松完成,这样就不会冻结所有反应性,这似乎是涉及{{1}的许多问题的解决方案。在另一个问题中。但是,在我的实际应用程序中有很多输入和反应来源,因此当submitButton完成所有这些时,配置actionButton并在observeEvent中捕获所有所需的效果将非常繁琐。唯一的问题是创业。我有没有其他方法可以在第一次启动时制作情节,但是从那时起遵循submitButton行为?

示例应用:

submitButton

1 个答案:

答案 0 :(得分:1)

您可以使用reactive检查输入是否为空(第一次),然后提供默认值:

  Cylselection <- reactive({
    if(is.null(input$Cylselection)) 
       sort(unique(mtcars$cyl)) 
    else 
       input$Cylselection})

  output$Carsplot <- renderPlot({
    plotdata <- subset(mtcars, cyl %in% Cylselection()) #Filter based on cyl
    ggplot(plotdata, aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot
      geom_point()
  })

更优雅的是将您的数据子集置于被动反应中:

  plotdata <- reactive({
    if(is.null(input$Cylselection)) 
      mtcars
    else 
      subset(mtcars, cyl %in% input$Cylselection)})

  output$Carsplot <- renderPlot({
    ggplot(plotdata(), aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot
      geom_point()
  })