R Shiny app closes by itself after a while when running from R Studio, but it's still listening... is this normal?

Viewed 602

Generic question about R Shiny/R Studio...

I've noticed that when I run my R Shiny app, everything I've programmed so far works as intended. However, if I keep the window open in the background and switch to using something else (i.e. Excel, Chrome, etc.), or sometimes even if I'm on the window itself, after a few minutes or so the window just closes by itself. However R Studio shows that it is still listening, and it won't run further code until I press the STOP button to terminate the existing run of the app.

Is this behavior normal in R Studio when developing the app, or does it suggest that there's something wrong with my code that's causing it to disappear? There are no warning messages that appear in the console when it disappears. I've tried running another app using some basic example code I found, and the same thing happens.

If this is a common thing, why does it do that and is there any way to stop this?

Example code probably isn't relevant, but here is an example app from the RStudio website https://shiny.rstudio.com/articles/basics.html. This issue occurs with this app too.

ui <- fluidPage(
  
  # App title ----
  titlePanel("Reactivity"),
  
  # Sidebar layout with input and output definitions ----
  sidebarLayout(
    
    # Sidebar panel for inputs ----
    sidebarPanel(
      
      # Input: Text for providing a caption ----
      # Note: Changes made to the caption in the textInput control
      # are updated in the output area immediately as you type
      textInput(inputId = "caption",
                label = "Caption:",
                value = "Data Summary"),
      
      # Input: Selector for choosing dataset ----
      selectInput(inputId = "dataset",
                  label = "Choose a dataset:",
                  choices = c("rock", "pressure", "cars")),
      
      # Input: Numeric entry for number of obs to view ----
      numericInput(inputId = "obs",
                   label = "Number of observations to view:",
                   value = 10)
      
    ),
    
    # Main panel for displaying outputs ----
    mainPanel(
      
      # Output: Formatted text for caption ----
      h3(textOutput("caption", container = span)),
      
      # Output: Verbatim text for data summary ----
      verbatimTextOutput("summary"),
      
      # Output: HTML table with requested number of observations ----
      tableOutput("view")
      
    )
  )
)

# Define server logic to summarize and view selected dataset ----
server <- function(input, output) {
  
  # Return the requested dataset ----
  # By declaring datasetInput as a reactive expression we ensure
  # that:
  #
  # 1. It is only called when the inputs it depends on changes
  # 2. The computation and result are shared by all the callers,
  #    i.e. it only executes a single time
  datasetInput <- reactive({
    switch(input$dataset,
           "rock" = rock,
           "pressure" = pressure,
           "cars" = cars)
  })
  
  # Create caption ----
  # The output$caption is computed based on a reactive expression
  # that returns input$caption. When the user changes the
  # "caption" field:
  #
  # 1. This function is automatically called to recompute the output
  # 2. New caption is pushed back to the browser for re-display
  #
  # Note that because the data-oriented reactive expressions
  # below don't depend on input$caption, those expressions are
  # NOT called when input$caption changes
  output$caption <- renderText({
    input$caption
  })
  
  # Generate a summary of the dataset ----
  # The output$summary depends on the datasetInput reactive
  # expression, so will be re-executed whenever datasetInput is
  # invalidated, i.e. whenever the input$dataset changes
  output$summary <- renderPrint({
    dataset <- datasetInput()
    summary(dataset)
  })
  
  # Show the first "n" observations ----
  # The output$view depends on both the databaseInput reactive
  # expression and input$obs, so it will be re-executed whenever
  # input$dataset or input$obs is changed
  output$view <- renderTable({
    head(datasetInput(), n = input$obs)
  })
  
  
}
shinyApp(ui, server)
1 Answers

I wrote a few shiny apps myself, and I haven't encountered this behavior before, not even in RStudio or in my standalaone chrome app which uses no rstudio at all.

What I can see at a first glance, that you dont use a session object in your server.

function(input, output, session)

While the session object handles reconnection with a server in the background, maybe it also does so with your localhost. But I really dont know. Try to integrate this and if the error is still there, we have to look at your system and the installed packages in your app.

Session object

Related