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

R Shiny上传双文件时校验文件名指定片段一致的报错咨询

问题原因
  • 多文件上传场景下,input$bam返回的是包含name/size/type/datapath四列的数据框,你直接对整个数据框做正则匹配,无法正确提取文件名
  • 页面初始化、用户未完成上传时,input$bam为空值,此时调用str_extract_all返回空列表,取[[1]]/[[2]]会得到长度为0的向量,代入if判断就触发「参数长度为零」的报错
  • 之前validate写法错误,need的第二个参数直接传错误提示字符串即可,不需要嵌套print函数
修复后代码
data <- reactive({
  # 校验必须上传2个文件才继续执行,避免空值报错
  req(input$bam)
  validate(need(nrow(input$bam) == 2, "请上传2个对应的文件"))
  
  # 提取上传的文件名做匹配
  file_names <- input$bam$name
  pattern <- "[0-9]{3}[:punct:][0-9]{5}[:punct:][A-Z]{3}[0-9]{8}"
  # 用str_extract替代str_extract_all,单个文件名只需匹配1次目标片段,匹配失败返回NA
  clean_file_1 <- str_extract(file_names[1], pattern)
  clean_file_2 <- str_extract(file_names[2], pattern)
  
  # 依次校验匹配有效性、片段一致性
  validate(
    need(!is.na(clean_file_1) & !is.na(clean_file_2), "文件名未匹配到指定格式片段,请检查上传文件"),
    need(clean_file_1 == clean_file_2, "请上传DNA编号一致的pool1和pool2文件")
  )
  
  # 所有校验通过后返回文件数据供后续逻辑使用
  return(input$bam)
})
补充说明
  • 上述代码使用Shiny原生的validate机制,校验失败时错误提示会自动展示在所有依赖该reactive的UI组件位置,不会抛出后台报错
  • 如果需要弹出模态框提示错误,可在校验逻辑中搭配Shiny原生的showModal(modalDialog())实现,无需额外安装依赖包

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:00:05