循环遍历R中同一目录中的所有文件

时间:2017-08-24 09:59:26

标签: r

所有文件的R中的以下代码。实际上我为它做了一个for循环但是当我运行它时它将只应用于一个文件而不是全部。顺便说一句,我的文件没有标题。

2 个答案:

答案 0 :(得分:0)

您使用[[来汇总来自peaks的内容。但是,在使用文件名读取它之后,它是一个数据框,然后不再引用文件名。因此,你只需摆脱[[i]]

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

通过在i中使用每次保存新文件名的迭代器read.delim(),每次R遍历循环时,peaks将具有新文件的内容。

答案 1 :(得分:0)

在您的代码中,i引用了一个名称文件。改为使用索引。

顺便说一句,不要使用setwd,请在full.names = TRUE中使用list.files选项。并预先分配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
})