You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:21:03