如何在R中基于文件打开条件编写if/else语句实现循环询问文件名?
R实现重复询问fasta文件名直到文件存在的函数实现
这里更适合使用while循环实现未知次数的重复询问逻辑,比固定迭代次数的for循环更适配需求,完整可运行的函数如下:
openfasta <- function(){ # 初始化文件存在标记为未找到 file_found <- FALSE # 只要没找到文件就持续循环 while(!file_found){ DNASeq <- readline(prompt = "Enter the .fasta file name:") # 检测文件是否存在于当前工作目录 if(file.exists(DNASeq)){ file_found <- TRUE # 读取并返回fasta文件内容 return(readLines(DNASeq)) } else { # 文件不存在时输出警告 warning("当前工作目录中未找到文件: ", DNASeq, ",请重新输入") } } }
逻辑说明
- 用
file.exists()函数作为文件是否存在的判断依据,替代原代码中直接对字符串变量做布尔判断的错误逻辑 while循环会持续触发输入提示,直到用户输入的文件名能被file.exists()检测到才会退出循环并返回文件内容- 原函数中多余的
DNAseq参数已移除,因为文件名完全通过用户交互输入获取
如果一定要用for循环实现,可以设置一个足够大的最大重试次数,示例如下:
openfasta <- function(max_retry = 100){ for(i in 1:max_retry){ DNASeq <- readline(prompt = "Enter the .fasta file name:") if(file.exists(DNASeq)){ return(readLines(DNASeq)) } else { warning("当前工作目录中未找到文件: ", DNASeq, ",剩余重试次数:", max_retry - i) } } stop("已超过最大重试次数,操作终止") }
内容的提问来源于stack exchange,提问作者Alex Silvestrini
相关产品推荐
相关产品推荐

