2017-08-24 121 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 
}) 
相关问题