2016-04-21 69 views
1

我有一些.vcf文件。我從我的目錄中選擇了這些文件,並希望將它們轉換爲另外兩種格式。有條件地使用循環和if else語句處理(bgzip,tabix)文件

我在這裏使用ifelse if有點困惑。我想這樣做:如果沒有.bgz文件[i] th .vcf文件,我想將其轉換爲.bgz文件保留原始文件。

如果已經有.bgz文件,但不.bgz.tbi文件[i].bgz文件,然後我想.bgz文件轉換爲.bgz.tbi文件保持原有.bgz,我從.vcf文件中獲取。

有人能幫我完成這個循環嗎?它適用於條件,但不知道如何從那裏繼續。

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") 
    } 
} 
+1

請注意:一切'.bgz'應該'這裏.gz'在這個崗位。 – MAPK

回答

3

試試這個(未測試):

#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") 
    }