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

请求帮助实现R Shiny中用户选择工作目录的响应式文本显示

求助:实现R Shiny中用户选择工作目录的响应式文本显示

嗨,我来帮你搞定这个响应式目录显示的需求!看了你提供的R版本(4.2.2),下面的调整方案完全适配这个版本,能实现你要的效果:一开始显示「No working directory chosen」,用户选完目录后自动更新成实际路径。

核心改动点

  • 在UI里新增一个文本输出控件,专门用来显示当前选择的目录
  • 在Server里解析shinyDirChoose返回的目录列表,转成实际可阅读的路径
  • 添加响应式逻辑,根据用户是否选择目录切换显示内容
  • 统一管理根目录配置,避免重复代码

完整修改后的代码

library(shiny)
library(shinyFiles)

ui <- fluidPage(
  h1("Qualtrics Automation"),
  
  textInput("sfnumber", "Enter SF Number", value = "test"),
  
  shinyDirButton('folder', 'Select a folder', 'Please select a folder', FALSE),
  
  # 新增:显示选择的目录的区域
  h3("Current Working Directory:"),
  verbatimTextOutput("selectedDir", placeholder = TRUE), # 自带空白盒子样式,符合需求
  
  actionButton("runScript", "Run")
)

server <- function(input, output, session) {
  # 统一定义根目录,避免重复写
  root_dir <- c(wd = paste0('C:/Users/', Sys.info()[["user"]], "/clientfolder"))
  
  # 监听目录选择事件
  observe({
    shinyDirChoose(input, 'folder',
                   roots = root_dir,
                   filetypes = c('', 'txt'))
  })
  
  # 响应式渲染目录显示文本
  output$selectedDir <- renderText({
    # 判断用户是否已选择目录
    if (is.null(input$folder) || length(input$folder$path) == 0) {
      "No working directory chosen"
    } else {
      # 把shiny返回的结构化目录转成真实路径
      parseDirPath(root_dir, input$folder)
    }
  })
  
  mylist <- reactiveVal() # 存储输入的响应式列表
  
  observe({ 
    # 更新列表时同步使用解析后的真实路径
    mylist(list(
      sfnumber = input$sfnumber,
      workdir = if (is.null(input$folder) || length(input$folder$path) == 0) {
        NULL
      } else {
        parseDirPath(root_dir, input$folder)
      }
    ))
  })
  
  observeEvent(input$runScript, { 
    # 执行脚本时确保使用正确的目录路径
    source("source_script2.R", local = list2env(mylist()), echo = TRUE)
  })
  
  session$onSessionEnded(function() {
    stopApp()
  })
}

shinyApp(ui, server)

关键细节说明

  • 用verbatimTextOutput实现你想要的「空白盒子」效果,它自带类似文本框的样式;如果想要更简洁的纯文本显示,可以换成textOutput
  • parseDirPath是shinyFiles包的核心工具,能把组件返回的结构化目录数据转成系统可识别的真实路径
  • 在mylist里同步更新解析后的路径,确保后续运行脚本时用的是正确的目录,而不是原始的结构化列表格式

备注:内容来源于stack exchange,提问作者megmac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:47:37