首页 > 解决方案 > 退出时删除动态创建的目录

问题描述

我有一个在闪亮会话期间动态创建的目录。目录名称和路径位于反应值内。如何在退出会话时删除此目录?

工作示例:

library("shiny")

ui <- fluidPage(
  verbatimTextOutput("display")
)
server <- function(input,output,session) {

  rv <- reactiveValues(newpath="./temporary")

  fnr <- reactive({
    dir.create(rv$newpath)
    return(paste("Directory created"))
  })

  output$display <- renderPrint({
    fnr()
  })

  session$onSessionEnded(function() {
    unlink(rv$newpath,recursive=TRUE)
    ##unlink("./temporary",recursive=TRUE)
  })
}
shinyApp(ui=ui, server=server)

这会产生错误,因为在rv$newpath反应上下文之外调用了反应值 ( )。

标签: rshinyshiny-reactivity

解决方案


来自?reactiveValues

如果不在反应式上下文中(例如,在控制台),您可以使用isolate() 来检索值:

isolate即使您不在响应式上下文中,您也应该能够将您的响应式值包围起来以获取它的值:

session$onSessionEnded(function() {
    unlink(isolate(rv$newpath),recursive=TRUE)
})

推荐阅读