2014-04-05 35 views
0

不同的目錄中列出的文件,我想cbind幾個文件一起使用:其中具有相同的文件命名格式[R]

do.call("cbind",lapply(sample_list, FUN=function(files){read.table(files, header=TRUE, sep="\t", stringsAsFactors=FALSE)})) 

但是,我sample_list文件(例如,1c.QC.dat)是不同的目錄。但是目錄遵循相同的模式:

/home/Project1/Files/Sample_*/*.QC.dat 

其中*是樣本ID。

有沒有辦法輕鬆列出這些文件?

+0

你可以一起粘貼目錄名稱。 – CCurtis

回答

2

我們首先選擇我們的Sample_*目錄。

main_dir <- '/home/Project1/Files/' 
directories <- list.files(main_dir, pattern = '^Sample_') 
directories <- Filter(function(x) file.info(file.path(main_dir, x))$isdir, directories) 

我們現在有Sample_開始目錄的特徵向量。現在,我們可以在我們的data.frames閱讀:

dfs <- lapply(directories, function(subdir) { 
    files <- list.files(path <- file.path(main_dir, subdir), pattern = '\\.QC\\.dat$') 
    subdfs <- lapply(files, function(filename) 
    read.table(file.path(path, filename), header=TRUE, sep="\t", stringsAsFactors=FALSE) 
) 
    do.call(rbind, subdfs) 
}) 

最後,我們將它們綁定到一個巨大的數據幀:

dfs <- do.call(rbind, dfs) # Notice we used the same trick twice 

較短,但聰明的選擇是使用recursive = TRUE參數上list.files

dfs <- do.call(rbind, lapply(
    list.files(path <- '/home/Project1/Files/', 
      pattern = '^Sample_.*\\.QC\\.dat$', recursive = TRUE), 
    function(filename) 
    read.table(file.path(path, filename), header=TRUE, sep="\t", stringsAsFactors=FALSE) 
)) 
+0

我試過了最後一個似乎不起作用的解決方案,但是有一個'{'在第二個中丟失了?' – user2726449

+0

哎呀!不知道爲什麼我的命令行能夠正常工作,修正了 –

+0

謝謝! m可能丟失了一些明顯的東西,但是每個解決方案都會創建'dfs'來等於NULL。 – user2726449

相關問題