【问题标题】:How to apply a function on multiple files from same sample and combine them?如何对来自同一样本的多个文件应用函数并将它们组合起来?
【发布时间】:2021-11-03 08:58:04
【问题描述】:

我在Data 目录中有许多示例文件。大约有 80 个样本。每个样本都有 3 个以样本名称为前缀的不同格式的输出文件。设置如下所示。我在这里只展示了几个示例文件。

Data
 |___ PFRT001_disions.tsv
 |___ PFRT001_predictions.tsv
 |___ PFRT001_tool.beans.results.gz
 |___ PFRT007_disions.tsv
 |___ PFRT007_predictions.tsv
 |___ PFRT007_tool.beans.results.gz
 |___ PFRT009_disions.tsv
 |___ PFRT009_predictions.tsv
 |___ PFRT009_tool.beans.results.gz
 |___ PFRT023_disions.tsv
 |___ PFRT023_predictions.tsv
 |___ PFRT023_tool.beans.results.gz
 |___ PFRT098_disions.tsv
 |___ PFRT098_predictions.tsv
 |___ PFRT098_tool.beans.results.gz

现在,我对每个样本(3 个不同格式的文件)应用一个函数,并用一个名称保存函数的输出。

这里我展示了我如何将函数应用于示例PFRT001

sample1 <- single_sample(disionsfile = file.path("/path/to/directory","Data","PFRT001_disions.tsv"),
  predictionsfile = file.path("/path/to/directory","Data","PFRT001_predictions.tsv"),
  expFile = file.path("/path/to/directory","Data","PFRT001_tool.beans.results.gz"),
  tumorID = "PFRT001",
  Filter = FALSE)

然后我又在样本PFRT007上运行了相同的函数

sample2 <- single_sample(disionsfile = file.path("/path/to/directory","Data","PFRT007_disions.tsv"),
      predictionsfile = file.path("/path/to/directory","Data","PFRT007_predictions.tsv"),
      expFile = file.path("/path/to/directory","Data","PFRT007_tool.beans.results.gz"),
      tumorID = "PFRT007",
      Filter = FALSE)

我在每个样本(3 个文件)上单独应用此函数并将其保存为一个名称,然后将它们组合如下:

All <- do.call("rbind", list(sample1, sample2))

我有 80 个样本,每个样本有 3 个类似上面的文件。如何将上述功能应用于多个样本文件,并以不同的名称保存每个样本的输出?还有rbind 所有的输出?我想在R 做。任何帮助表示赞赏。

【问题讨论】:

    标签: r dplyr tidyverse purrr rbind


    【解决方案1】:

    假设您的函数single_sample 返回一个data.frame,那么map_dfr 是最适合您的函数:

    library(stringr)
    library(purrr)
    
    file_names <- list.files(path = "/path/to/directory/Data")
    unique_names <- unique(str_extract(file_names, ".+?(?=_)"))
    
    all_data <- unique_names %>% 
      map_dfr(~single_sample(
        disionsfile = file.path("/path/to/directory","Data",paste0(.x, "_disions.tsv")),
        predictionsfile = file.path("/path/to/directory","Data", paste0(.x, "P_predictions.tsv")),
        expFile = file.path("/path/to/directory","Data",paste0(.x, "_tool.beans.results.gz")),
        tumorID = .x,
        Filter = FALSE
      ), .id = "sample")
    

    .id = "sample" 添加一个名为sample 的列,其中包含.x 数据来自的信息

    【讨论】:

    • 非常感谢。这非常有用。我接受了答案,但无法投票。一旦我获得 15 个声望,我就会投票。顺便说一句,predictionsfile 末尾缺少一个,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多