You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求ShinyR读取文件夹全部文件并支持复选框选择处理的示例脚本

Shiny示例:本地文件夹文件选择与批量处理

嘿,这个需求挺常见的,我给你写了一个完整的Shiny示例脚本,完全能实现你要的功能——自动读取指定文件夹里的所有文件,用复选框让你选单个或多个,还附带了简单的处理逻辑供你参考:

library(shiny)

ui <- fluidPage(
  titlePanel("本地文件夹文件选择器"),
  
  sidebarLayout(
    sidebarPanel(
      # 动态生成的文件复选框
      checkboxGroupInput(
        inputId = "selected_files",
        label = "选择要处理的文件:",
        choices = NULL  # 选项将在server端初始化时加载
      ),
      br(),
      actionButton(inputId = "process_btn", label = "开始处理", class = "btn-primary")
    ),
    
    mainPanel(
      h4("已选中的文件"),
      verbatimTextOutput("selected_files_display"),
      hr(),
      h4("处理结果预览"),
      verbatimTextOutput("process_outcome")
    )
  )
)

server <- function(input, output, session) {
  # 👇 替换成你需要读取的目标文件夹路径
  target_dir <- "~/your-target-folder-path"
  
  # 应用启动时自动加载文件夹内的文件,更新复选框选项
  observe({
    # 读取文件夹内所有文件(可添加pattern过滤类型,比如pattern = "\\.csv$"只显示CSV)
    all_files <- list.files(target_dir, full.names = FALSE)
    
    # 动态更新复选框的可选文件列表
    updateCheckboxGroupInput(
      session = session,
      inputId = "selected_files",
      choices = all_files,
      selected = NULL
    )
  })
  
  # 实时显示用户选中的文件
  output$selected_files_display <- renderPrint({
    if (length(input$selected_files) == 0) {
      "请选择至少一个文件进行处理"
    } else {
      cat("你选中了以下文件:\n", paste0("- ", input$selected_files, collapse = "\n "))
    }
  })
  
  # 处理选中文件的核心逻辑(这里是示例,可替换为你的业务代码)
  observeEvent(input$process_btn, {
    # 确保有文件被选中才执行
    req(input$selected_files)
    
    # 获取选中文件的完整路径
    selected_file_paths <- file.path(target_dir, input$selected_files)
    
    # 示例处理:统计每个文件的行数(适合文本/CSV类文件)
    processing_results <- lapply(selected_file_paths, function(file_path) {
      file_lines <- readLines(file_path)
      paste0("📄 ", basename(file_path), ": 共", length(file_lines), "行")
    })
    
    # 输出处理结果
    output$process_outcome <- renderPrint({
      cat(paste0(processing_results, collapse = "\n"))
    })
  })
}

shinyApp(ui = ui, server = server)

关键细节说明:

  • 指定文件夹路径:把代码里的target_dir替换成你的实际文件夹路径就行,如果你想让用户自己输入路径,可以把它改成textInput组件,配合observe更新文件列表。
  • 过滤文件类型:如果只需要展示特定类型的文件(比如CSV、Excel),可以给list.files()加pattern参数,比如pattern = "\\.xlsx$"只显示Excel文件。
  • 自定义处理逻辑:把observeEvent里的processing_results部分换成你自己的代码就行——比如读取CSV做数据分析、生成可视化图表、批量转换文件格式等等。

内容的提问来源于stack exchange,提问作者rjn_bnf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:12:17