从 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 应用程序时如何在数据表函数中编辑列名?