遍历文件并使用函数,然后使用该结果在 r 中形成数据框

Loop through files and use functions, then use that result to form a dataframe in r

我有一个排序的 bam 文件目录,我想使用 pileup 函数。 pileup 函数的输出是一个数据帧。然后我想使用每个文件的结果并形成一个数据框。

对于每个文件,我使用以下代码:

r16<-pileup(filename, index=filename, scanBamParam = ScanBamParam(), pileupParam = PileupParam())
r16$sample_id <- "sample id"

对于sample_id列,我希望它是文件名,例如:

在处理完所有文件后,我会使用 rbind 获取大数据帧并将其保存到 RData 文件中。

到目前为止,我已经尝试在它们上面使用循环,但它没有给我任何输出。

library(pasillaBamSubset)
library(Rsamtools)
filenames<-Sys.glob("*.sorted.bam")
for (file in filenames) {
  output <- pileup(pileup(filenames, index=filenames, scanBamParam = ScanBamParam(), pileupParam = PileupParam()))
  save(output, file = "res.RData")
}

我假设您想将所有 data.frames 堆叠在一起(行绑定)。 map(来自 purrr)或 lapply 可以对每个项目应用一个函数 给定的 list/vector(在本例中为每个文件名)。 map_dfr 做同样的事情,行绑定所有输出。

filenames <- list.files(pattern = "*.sorted.bam")

library(purrr)
purrr::map_dfr(filenames, ~pileup(.x, 
                                  index = .x,
                                  scanBamParam = ScanBamParam(),
                                  pileupParam = PileupParam()))