R语言如何批量对同一样本的多个关联文件应用函数并合并结果
解决方法
你可以通过提取样本唯一ID + 批量迭代处理的方式实现需求,无需手动逐个声明变量,完整实现代码如下:
步骤1:提取所有样本ID
# 首先设置Data目录所在的父目录路径 base_dir <- "/path/to/directory" data_dir <- file.path(base_dir, "Data") # 列出Data目录下所有的tsv/gz文件 all_files <- list.files(data_dir, pattern = "\\.(tsv|gz)$") # 提取所有文件名的前缀(样本ID,即第一段下划线前的部分),去重得到所有样本ID列表 sample_ids <- unique(gsub("_.*", "", all_files))
步骤2:批量处理所有样本
推荐使用lapply做迭代,返回的列表天然包含所有样本的结果,无需单独创建每个sampleX变量:
# 批量调用single_sample函数处理每个样本 sample_result_list <- lapply(sample_ids, function(id) { # 拼接当前样本对应的3个文件路径 disions_file <- file.path(data_dir, paste0(id, "_disions.tsv")) pred_file <- file.path(data_dir, paste0(id, "_predictions.tsv")) exp_file <- file.path(data_dir, paste0(id, "_tool.beans.results.gz")) # 调用处理函数 res <- single_sample( disionsfile = disions_file, predictionsfile = pred_file, expFile = exp_file, tumorID = id, Filter = FALSE ) # 如果需要单独保存每个样本的结果到全局环境,可取消下面这行的注释 # assign(paste0("sample_", id), res, envir = .GlobalEnv) return(res) })
步骤3:合并所有样本结果
直接对返回的结果列表做行合并即可:
# 方法1:用基础函数do.call+rbind合并 All <- do.call("rbind", sample_result_list) # 方法2:如果你的结果是data.frame,也可以用dplyr的bind_rows,处理大样本效率更高 # library(dplyr) # All <- bind_rows(sample_result_list)
内容的提问来源于stack exchange,提问作者maven
相关产品推荐
相关产品推荐

