R 使用循环和if-else语句有条件地处理(bgzip、tabix)文件

R 使用循环和if-else语句有条件地处理(bgzip、tabix)文件,r,if-statement,bioinformatics,vcf-variant-call-format,R,If Statement,Bioinformatics,Vcf Variant Call Format,我有一些.vcf文件。我已从目录中选择了这些文件,并希望将它们转换为其他两种格式 在这里使用if和else if我有点困惑。我想这样做:如果[I]th.vcf文件没有.bgz文件,我想将其转换为.bgz文件,保留原始文件 如果已经有.bgz文件,但没有.bgz.tbi文件用于.bgz>.bgz文件,那么我想将.bgz文件转换为.bgz.tbi文件,保留从.vcf文件获得的原始.bgz 有人能帮我完成这个循环吗?它适用于if条件,但不知道如何从那里开始 path.file<-"/mypa

我有一些
.vcf
文件。我已从目录中选择了这些文件,并希望将它们转换为其他两种格式

在这里使用
if
else if
我有点困惑。我想这样做:如果
[I]
th
.vcf
文件没有
.bgz
文件,我想将其转换为
.bgz
文件,保留原始文件

如果已经有
.bgz
文件,但没有
.bgz.tbi
文件用于
.bgz>.bgz
文件,那么我想将
.bgz
文件转换为
.bgz.tbi
文件,保留从
.vcf
文件获得的原始
.bgz

有人能帮我完成这个循环吗?它适用于if条件,但不知道如何从那里开始

  path.file<-"/mypath/for/files/" 
  all.files <- list.files("/mypath/for/files")
  all.files <- all.files[grepl(".vcf$",all.files)]

for (i in 1:length(all.files)){
 if(!exists(paste0(all.files[i],".bgz"))){
  bgzip(paste0(path.file,all.files[i]), overwrite=FALSE)
  }else{(!exists(paste0(all.files[i],".bgz",".tbi"))){
  #if(!exists(paste0(all.files[i],".bgz",".tbi"))){
  indexTabix(paste0(paste0(path.file,all.files[i]),".bgz"), format="vcf")
  }
 }
path.file试试这个(未测试):

#获取带有路径的VCF文件

请注意:在这篇文章中,所有
.bgz
都应该是
.gz
#get VCF files with path
all.files <- list.files("/mypath/for/files", pattern = "*.vcf$",
                        full.names = TRUE)

for (i in all.files) {
  #make output names, so we don't mess about with paste
  file_bgz <- paste0(i, ".bgz")
  file_bgz_tbi <- paste0(i, ".bgz.tbi")

  #if bgz exists don't zip else zip
  if(!exists(file_bgz))
    bgzip(i, paste0(i, ".bgz"))

  #if tbi exists don't index else tabix
  if(!exists(file_bgz_tbi))
    indexTabix(file_bgz, format = "vcf")
  }