如何让R语言函数支持逗号分隔QC类型输入及ALL选项?
解决R语言QC类型输入函数的多值识别与ALL选项问题
下面是修改后的函数代码,直接解决你提到的两个问题:支持逗号空格分隔的多类型输入,以及新增ALL全选选项:
askforQC_type <- \(qctype){ qctype <- readline("What QC types would you like to run? (Enter comma-separated values or 'ALL' for all types) ") qualitycontroltypes <- c('BLK', 'DDL', 'DUP', 'FBLK', 'LCS', 'LCSD', 'LDUP', 'LMB', 'MS', 'MSD', 'NO3', 'RNS', 'SO4', 'SPI', 'SPL', 'TBLK') # 处理ALL选项(不区分大小写) if(toupper(qctype) == "ALL") { chosen_types <- qualitycontroltypes writeLines(paste("QC types chosen:", paste(chosen_types, collapse = ", "))) return(invisible(chosen_types)) # 返回选中的类型,方便后续代码调用 } # 拆分逗号加空格分隔的输入为单个元素向量 qctype_split <- strsplit(qctype, ", ")[[1]] # 检查所有输入类型是否合法 valid_types <- qctype_split %in% qualitycontroltypes if(all(valid_types)) { writeLines(paste("QC types chosen:", paste(qctype_split, collapse = ", "))) invisible(qctype_split) # 返回选中的类型 } else { # 提取并提示无效类型,同时列出所有合法选项 invalid_types <- qctype_split[!valid_types] writeLines(paste("Sorry, the following QC types are not applicable:", paste(invalid_types, collapse = ", "))) writeLines(paste("Valid QC types are:", paste(qualitycontroltypes, collapse = ", "))) } }
关键改动说明
- 输入提示新增说明,明确告诉用户可以输入的格式
- 新增
toupper()判断,输入ALL或all都能触发全选逻辑 - 用
strsplit(qctype, ", ")[[1]]把逗号空格分隔的字符串拆成单个元素的向量,实现多值识别 - 改用
all(valid_types)检查所有输入的合法性,替代原来的单字符串匹配 - 错误提示更友好:明确指出无效类型,同时列出所有合法选项
- 增加
invisible()返回选中的类型,方便后续代码直接调用该函数的结果
测试示例
- 单个有效输入
askforQC_type() # 输入: DUP # 输出: QC types chosen: DUP
- 多个有效输入
askforQC_type() # 输入: DUP, RNS, SPL # 输出: QC types chosen: DUP, RNS, SPL
- ALL全选选项
askforQC_type() # 输入: ALL # 输出: QC types chosen: BLK, DDL, DUP, FBLK, LCS, LCSD, LDUP, LMB, MS, MSD, NO3, RNS, SO4, SPI, SPL, TBLK
- 包含无效输入的情况
askforQC_type() # 输入: DUP, TEST, SPL # 输出: # Sorry, the following QC types are not applicable: TEST # Valid QC types are: BLK, DDL, DUP, FBLK, LCS, LCSD, LDUP, LMB, MS, MSD, NO3, RNS, SO4, SPI, SPL, TBLK
内容的提问来源于stack exchange,提问作者Matt Schaaf
相关产品推荐
相关产品推荐

