所有文件的R
中的以下代码。实际上我为它做了一个for循环但是当我运行它时它将只应用于一个文件而不是全部。顺便说一句,我的文件没有标题。
答案 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
}
或者您只需使用sapply
或purrr::map_dbl
:
sapply(filelist.coverages, function(file) {
peaks <- read.delim(file, sep = '', header = FALSE)
peaks$V3 - peaks$V2
})