2017-08-24 103 views
-1

以下代碼爲R中的所有文件。實際上我爲此做了一個for循環,但是當我運行它時,它只會應用於一個文件而不是所有文件。順便說一句,我的文件沒有標題。循環遍歷R中的同一目錄中的所有文件

+0

讓出'[I]]' – loki

+0

那麼如何循環的文件? – john

+0

您使用迭代器'i'在每次迭代中讀取一個新文件。因此,你*循環文件*,不是嗎? – loki

回答

0

您使用[[子集peaks。但是,在使用文件名讀取它之後,它是一個數據框,然後不再引用文件名。因此,你只需要擺脫[[i]]

for (i in filelist.coverages) { 
    peaks <- read.delim(i, sep='', header=F) 
    PeakSizes <- c(PeakSizes, peaks$V3 - peaks$V2) 
} 

通過使用迭代iread.delim()其每次保存新文件名,每一個R會通過循環時間,peaks將有一個新的文件的內容。

0

在您的代碼中,i正在引用名稱文件。改用指數。

而且,順便說一下,不要使用setwd,在list.files中使用full.names = TRUE選項。並預先分配PeakSizes這樣的:PeakSizes <- numeric(length(filelist.coverages))

所以做:

filelist.coverages <- list.files('K:/prostate_cancer_porto/H3K27me3_ChIPseq/', 
           pattern = 'island.bed', full.names = TRUE) 

##all 97 bed files 
PeakSizes <- numeric(length(filelist.coverages)) 
for (i in seq_along(filelist.coverages)) { 
    peaks <- read.delim(filelist.coverages[i], sep = '', header = FALSE) 
    PeakSizes[i] <- peaks$V3 - peaks$V2 
} 

或者你可以簡單地使用sapplypurrr::map_dbl

sapply(filelist.coverages, function(file) { 
    peaks <- read.delim(file, sep = '', header = FALSE) 
    peaks$V3 - peaks$V2 
})