从 R Studio 运行时,R Shiny 应用程序会在一段时间后自行关闭,但它仍在收听......这是正常的吗?

Posted

技术标签:

【中文标题】从 R Studio 运行时,R Shiny 应用程序会在一段时间后自行关闭,但它仍在收听......这是正常的吗?【英文标题】:R Shiny app closes by itself after a while when running from R Studio, but it's still listening... is this normal? 【发布时间】:2021-05-31 00:01:15 【问题描述】:

关于 R Shiny/R Studio 的一般问题...

我注意到,当我运行我的 R Shiny 应用程序时,到目前为止我编写的所有程序都按预期工作。但是,如果我在后台保持窗口打开并切换到使用其他东西(即 Excel、Chrome 等),或者有时即使我在窗口本身,几分钟左右后窗口就会关闭本身。然而,R Studio 显示它仍在侦听,并且在我按下 STOP 按钮终止应用程序的现有运行之前,它不会运行进一步的代码。

在开发应用程序时,这种行为在 R Studio 中是否正常,或者是否表明我的代码有问题导致它消失?控制台消失时不会出现警告消息。我尝试使用我找到的一些基本示例代码运行另一个应用程序,但同样的事情发生了。

如果这是常见的事情,为什么要这样做?有什么办法可以阻止这种情况?

示例代码可能不相关,但这里是来自 RStudio 网站https://shiny.rstudio.com/articles/basics.html 的示例应用程序。此应用也会出现此问题。

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)

【问题讨论】:

我也有同样的问题。当应用程序部署到 RS 连接服务器时,问题就解决了。只有当它从 RStudio Server 运行时,它才会发生。 【参考方案1】:

我自己编写了一些闪亮的应用程序,我以前从未遇到过这种行为,甚至在 RStudio 或我的完全不使用 rstudio 的独立 chrome 应用程序中也没有。

乍一看,您没有在服务器中使用会话对象。

function(input, output, session)

虽然会话对象在后台处理与服务器的重新连接,但它也可能与您的 localhost 一起处理。但我真的不知道。尝试集成它,如果错误仍然存​​在,我们必须查看您的系统和您应用中安装的包。

Session object

【讨论】:

谢谢,正如您所说,上面的代码中缺少会话对象,但我确实已经将它包含在我自己的应用程序的代码中,并且仍然存在此问题。我也尝试将“session$allowReconnect(TRUE)”行添加到服务器,但无济于事。 嗯,是整个浏览器关闭还是只关闭应用? 如果它是在chrome浏览器中运行的,也许它受到了它的某种影响。尝试删除所有 cookie 和浏览数据,禁用浏览器的所有扩展,这可能会影响它。 只是弹出的应用程序窗口,就像我说的,它只是消失的窗口。该应用程序本身仍在控制台窗口中运行,并且没有给出任何错误指示。我会尝试你的建议谢谢

以上是关于从 R Studio 运行时,R Shiny 应用程序会在一段时间后自行关闭,但它仍在收听......这是正常的吗?的主要内容,如果未能解决你的问题,请参考以下文章

部署 R Shiny 应用程序时加载包时出现问题

运行 R Shiny 应用程序时如何在数据表函数中编辑列名?

如何知道(或指定)R shiny 使用的 localhost 端口(在本地运行时)

无法在R中安装Shiny最新版本

在 Shiny 中,提交按钮没有运行

从使用 devtools 加载的包中设置 ReferenceClass 时,R 中的 Shiny 出错