如何遍历R中多个目录中的每个文件

时间:2015-08-14 04:53:29

标签: r

我有一个名为wanted.bam的对象,其中包含我的三个目录path1,path2,path3中所有.bam(是扩展名)文件的有用文件名列表。我循环遍历所有这些目录以搜索所需的文件。我想要做的是通过遍历每个目录并在每个文件中实现FUNCTION来查找所需文件。此循环适用于第一个目录中的所有匹配文件,但随着它进展到另一个目录,它会中断给出错误:

Error in value[[3L]](cond) : 
  failed to open BamFile: file(s) do not exist:
  'sort.bam' 

我的代码:

bam.dir<- c("path1","path2","path3")
    for (j in 1:length(bam.dir)){
    all.bam.files <- list.files(bam.dir[j])
    all.bam.files <- grep(wanted.names, all.bam.files, value=TRUE)           
    print(paste("The wanted number of bam files in this directory:", (length(all.bam.files))))     
      if(length(all.bam.files)==0){
        next
      }else{
    setwd(bam.dir[j])
    }
    print(paste("The working directory number:",j,":",(getwd())))

    ## ****using another loop here for each file to implement a function*****
    all.FAD<- {}
    for(i in 1:length(all.bam.files)){
    output<- FUNCTION(all.bam.files[i])
    }
  }

1 个答案:

答案 0 :(得分:4)

您可能不希望像这样更改工作目录。而是使用list.filesfull.names=TRUE中的选项返回文件的完整路径。然后,您可以在完整路径名上使用read.csv或其他任何内容,而无需更改目录。您的代码失败,因为在设置目录后,将更改下一个目录的相对路径。

如果要继续更改目录,只需确保在循环结束时将目录设置回基目录。