首页 > 解决方案 > 闪亮的应用程序结束后R闪亮的清除全局变量

问题描述

我想在退出闪亮的应用程序后清除定义的全局变量。

我所做的是添加一个onStop闪亮的server.R。但它不起作用。

非常感谢你的帮助。

onStop(function(){
 rm(list = ls(all.names = TRUE))
})

标签: rshiny

解决方案


要在应用程序停止时运行代码,您需要提供onStop作为参数shinyApp(嵌套在onStart回调函数中)。

如果您放置onStop在服务器功能中,它将在会话停止后运行(例如关闭浏览器窗口)。

请检查以下内容以查看差异:

library(shiny)

myGlobalVaribale <- "Some useful global content"

ui <- basicPage(p(myGlobalVaribale),
                actionButton("stopSession", "Stop session"),
                actionButton("stopApp", "Stop app")
)

server <- function(input, output, session) {
  
  onStop(function() cat("This will run on session stop\n"))
  
  observeEvent(input$stopSession, {
    cat(sprintf("Closing session %s\n", session$token))
    session$close()
  })
  
  observeEvent(input$stopApp, {
    cat("Stopping shiny app\n")
    stopApp()
  })
}

shinyApp(ui, server,
         onStart = function() {
           cat("This will run on app start\n")
           onStop(function() {
             cat("This will run on app stop\n")
             print(ls(envir = .GlobalEnv))
             rm(list = c("myGlobalVaribale"), envir = .GlobalEnv)
             print(ls(envir = .GlobalEnv))
           })
         }
)

推荐阅读