退出时删除动态创建的目录

Delete a dynamically created directory on exit

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

工作示例:

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)。

来自?reactiveValues

If not in a reactive context (e.g., at the console), you can use isolate() to retrieve the value:

你应该能够在 isolate 中围绕你的反应值来获得它的价值,即使你不在反应性环境中也是如此:

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