R 抑制submitButton对Shining app启动的影响

R 抑制submitButton对Shining app启动的影响,r,shiny,R,Shiny,我有一个闪亮的应用程序,带有一个反应式的UI,用于过滤我的数据。然后我使用这些数据进行绘图。我的UI反应位检查变量的所有可能值,在selectizeInput中提供它们作为选项,并从所有选定的选项开始。在我的实际应用程序中,过滤器中的更改可能需要相当长的时间才能运行,因此我有submitButton,以防止应用程序不断更新。唯一的问题是在应用程序的初始启动时:它将选择加载到动态UI并选择它们,但由于进一步的反应被submitButton阻止,此信息无法到达绘图,因此显示为空绘图。只需点击一次su

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

我正在寻找一种不必按下
submitButton
即可使绘图最初显示的方法。在我下面的玩具示例中,用
actionButton
替换
submitButton
可能很容易做到这一点,因此并非所有的反应都被冻结,这似乎是其他问题中涉及
submitButton
的许多问题的解决方案。然而,在我的实际应用程序中,有许多输入和反应源,因此配置
action按钮
并在
observeEvent
s中捕获所有期望的效果将是相当乏味的,因为
submitButton
完成了所有这些,唯一的问题是启动。有没有其他方法可以在第一次启动时显示绘图,但从那时起遵循
submitButton
行为

示例应用程序:

library(shiny)
library(ggplot2)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel( 
      uiOutput("Cylselectui"),
      submitButton("Apply changes")
    ),
    mainPanel(
     plotOutput("Carsplot") 
    )
  )
)


server <- function(input, output) {
  output$Carsplot <- renderPlot({
    plotdata <- subset(mtcars, cyl %in% input$Cylselection) #Filter based on cyl

    ggplot(plotdata, aes(x = mpg, y = hp, colour = factor(cyl))) + #Create plot
      geom_point()
  })

  output$Cylselectui <- renderUI({ #Create the cyl selectize ui based on the values of cyl that are in the data
    selectizeInput(
      'Cylselection', 'Select by Cylinder', 
      choices = sort(unique(mtcars$cyl)),
      selected = sort(unique(mtcars$cyl)),
      multiple = TRUE
    )
  })
}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(GG2)

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

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