combine_fastp_report.R 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. suppressPackageStartupMessages({
  2. library(jsonlite)
  3. library(dplyr)
  4. library(tidyr)
  5. library(purrr)
  6. library(argparse)
  7. })
  8. # 创建命令行参数解析器
  9. parser <- ArgumentParser()
  10. parser$add_argument("--input", type="character", nargs='+', help="input fastp JSON reports")
  11. parser$add_argument("--output", type="character", default="report", help="output folder to store fastp summary TSV and RData files")
  12. # 解析命令行参数
  13. args <- parser$parse_args()
  14. # 获取输入文件和输出目录
  15. json_files <- args$input
  16. output_folder <- args$output
  17. # 确保指定了输入文件
  18. if (length(json_files) == 0) {
  19. stop("No input files provided.")
  20. }
  21. # 创建输出文件夹
  22. dir.create(output_folder, showWarnings = FALSE, recursive = TRUE)
  23. # 输出文件路径
  24. output_file <- file.path(output_folder, "fastp_summary.tsv")
  25. # 将要提取的字段列在这里
  26. fields <- c(
  27. "total_reads",
  28. "total_bases",
  29. "q30_rate",
  30. "gc_content"
  31. )
  32. # 初始化一个空 data.frame 来存储结果
  33. fastp_summary <- data.frame()
  34. # 遍历所有 JSON 文件
  35. for (json_file in json_files) {
  36. # 读取 JSON 文件
  37. data <- fromJSON(json_file)
  38. # 从文件名中提取样本名称
  39. sample_name <- gsub("_fastp.json", "", basename(json_file))
  40. # 提取过滤前和过滤后的所需字段
  41. before_filtering <- data$summary$before_filtering[fields]
  42. after_filtering <- data$summary$after_filtering[fields]
  43. # 将结果添加到 data.frame
  44. result <- data.frame(sample = sample_name)
  45. result <- cbind(result, before_filtering, after_filtering)
  46. fastp_summary <- rbind(fastp_summary, result)
  47. }
  48. # 重命名列名
  49. colnames(fastp_summary) <- c("sample",
  50. paste0("before_", fields),
  51. paste0("after_", fields))
  52. # 排序
  53. fastp_summary <- fastp_summary %>% arrange(sample)
  54. # 将结果写入指定的 TSV 文件
  55. write.table(fastp_summary, output_file, sep = "\t", row.names = FALSE, quote = FALSE)
  56. # 存储 fastp_summary 数据到 RData 文件中
  57. save(fastp_summary, file = file.path(output_folder, "fastp_summary.RData"))