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

R语言QC检查脚本开发:验证用户输入匹配指定QC类型及多输入处理

QC检查脚本函数优化

原函数与需求

原函数片段:

askforQC_type <- \(qctype){
  answer <- readline("What QC types would you like to run?") 
  qualitycontroltypes <- c('BLK', 'DDL', 'DUP', 'FBLK', 'LCS', 'LCSD', 'LDUP', 'LMB', 'MS', 'MSD', 'NO3', 'RNS', 'SO4', 'SPI', 'SPL', 'TBLK')
  if(answer==qualitycontroltypes) {
    writeLines(paste("QC types chosen:", qctype))
  } else {
      writeLines(paste("Sorry", qctype, "is not an applicable QC type"))
    }
  }

需求:

  • 确保用户输入至少匹配qualitycontroltypes中的一个值,不匹配则输出错误提示
  • 支持逗号加空格分隔的多输入(如BLK, LCS, LDUP),无需引号或c()
  • 输入ALL则使用所有QC类型
  • 返回的结果可直接用于后续subset函数

已知单值可用answer %in% qualitycontroltypes匹配,但不知道怎么处理多输入。

优化后的函数

askforQC_type <- function() {
  # 定义允许的QC类型
  qualitycontroltypes <- c('BLK', 'DDL', 'DUP', 'FBLK', 'LCS', 'LCSD', 'LDUP', 'LMB', 'MS', 'MSD', 'NO3', 'RNS', 'SO4', 'SPI', 'SPL', 'TBLK')
  
  while(TRUE) {
    answer <- readline("What QC types would you like to run? (输入ALL使用全部类型,或用逗号+空格分隔多个类型,如BLK, LCS, LDUP): ")
    answer <- trimws(answer)  # 去除首尾空格
    
    # 处理ALL输入
    if(toupper(answer) == "ALL") {
      chosen_types <- qualitycontroltypes
      writeLines(paste("QC types chosen:", paste(chosen_types, collapse = ", ")))
      return(chosen_types)
    }
    
    # 处理逗号分隔的多输入
    input_types <- strsplit(answer, ",\\s*")[[1]]  # 按逗号+任意空格分割
    input_types <- trimws(input_types)  # 去除每个元素的空格
    
    # 验证输入合法性
    valid_types <- input_types[input_types %in% qualitycontroltypes]
    invalid_types <- input_types[!input_types %in% qualitycontroltypes]
    
    # 检查是否有至少一个合法类型
    if(length(valid_types) > 0) {
      if(length(invalid_types) > 0) {
        writeLines(paste("警告:以下QC类型不合法,已忽略:", paste(invalid_types, collapse = ", ")))
      }
      writeLines(paste("QC types chosen:", paste(valid_types, collapse = ", ")))
      return(valid_types)
    } else {
      writeLines("错误:输入的QC类型均不合法,请重新输入!")
      writeLines(paste("允许的QC类型:", paste(qualitycontroltypes, collapse = ", ")))
    }
  }
}

关键功能说明

  • 多输入处理:用strsplit(answer, ",\\s*")分割逗号加空格的输入,再用trimws清理每个元素的多余空格,将输入转换成向量格式
  • ALL匹配:用toupper(answer) == "ALL"实现不区分大小写的ALL输入匹配,直接返回全部QC类型
  • 合法性验证:通过%in%筛选合法与非法类型,存在非法类型时给出警告并自动忽略,无合法类型则提示重新输入
  • 返回值使用:直接返回合法的QC类型向量,可直接传入subset函数,例如subset(data, QC_type %in% chosen_types)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:35