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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:05