在反应上下文中监视目录中 files/folders 数量的好方法是什么?

What's a good way to monitor the number of files/folders in a directory in a reactive context?

这是我在闪亮的应用程序中尝试做的事情的简化版本:

## run a script that creates subdirectories
system('Rscript /path/to/dir/dir_generating_script.R')
## observe path and count new directories created
observe({
  d_count <- list.dirs("/path/to/dir") %>% length()
  showNotification(paste0(
    "Current dir count: ", d_count
  ))
})

我在这里遇到的问题是通知消息没有更新,因为 d_count 正在更改,而脚本在后台 运行。该消息仅在脚本完成 运行 时更新,但我希望在 运行 时看到计数递增。有没有更好的方法来被动地监视目录?

您可以使用 reactivePoll() 创建一个定期检查的反应文件计数(此处为 1 秒):

library(shiny)
library(tidyverse)

ui <- fluidRow(verbatimTextOutput("result"))

server <- function(input, output, session) {
  file_count <- function() {
    list.dirs(".", full.names = FALSE, recursive = FALSE) %>% 
      length()
    }
  current_file_count <- reactivePoll(1000, session, file_count, file_count)
  output$result <- renderText(current_file_count())
}

shinyApp(ui = ui, server = server)