这个批量火山图的批量原理是读取目录下的所有.txt文件,随后通过一个循环逐个处理这些文件,再输出到相应的_result文件夹下。并且代码循环中自带分组检测,能够识别列名中的字母来实现分组,因此只需要准备好表达矩阵即可,组内的同学可以使用学长学姐整理好的数据🥰,不过需要注意的是样本名不能重复,有重复的话可以手动编号一下。如果遇到很难处理的数据,可以先让ai写出一个小代码,将数据转化为输入数据的格式,再运行代码。
代码主体
1、数据读取和输入
这里的Normal和Tumor变量用于分组,比如说在这里Normal的功能就是将所用行名中带N的归位正常组,Tumor将所有行名中带T的归为肿瘤组。如果使用TCGA的数据可以把这段代码改为:
Normal <- "01A"
Tumor <- "11A"
# 1. 安装和加载必要的包 --------------------------------------------------------
required_packages <- c("limma", "ggplot2", "pheatmap", "dplyr", "tidyr", "RColorBrewer", "stringr")
# 检查并安装缺失的包
new_packages <- required_packages[!(required_packages %in% installed.packages()[,"Package"])]
if(length(new_packages)) {
message("正在安装缺失的包: ", paste(new_packages, collapse = ", "))
install.packages(new_packages, dependencies = TRUE)
}
# 加载所有需要的包
suppressPackageStartupMessages({
library(limma)
library(ggplot2)
library(pheatmap)
library(dplyr)
library(tidyr)
library(RColorBrewer)
library(stringr)
})
# 输入
setwd("/Users/blastora/Documents/Bioinformation_PROJECT/Volcano_Batch")
Normal <- "N|NORMAL|NORM"
Tumor <- "T|TUMOR|TUMOUR|TUM"
# 2. 主处理流程 --------------------------------------------------------------
# 获取当前目录下所有txt文件
input_files <- list.files(pattern = "\\.txt$", full.names = TRUE)
if(length(input_files) == 0) {
stop("没有找到任何.txt文件")
}
2、循环主体
代码运行的主体由一个for循囊括起来,达到自动化的目的
# 处理每个文件
for(input_file in input_files) {
message("正在处理文件: ", basename(input_file))
# 创建输出目录
output_dir <- file.path(dirname(input_file),
paste0(tools::file_path_sans_ext(basename(input_file)), "_results"))
dir.create(output_dir, showWarnings = FALSE)
# 1. 读取数据 --------------------------------------------------------------
tryCatch({
expr_data <- as.matrix(read.delim(input_file, row.names = 1, check.names = FALSE))
message("数据维度: ", nrow(expr_data), " 基因 × ", ncol(expr_data), " 样本")
# 2. 自动分组 ------------------------------------------------------------
message("\n2. 自动检测样本分组...")
# 转换为大写以防大小写不一致
upp

最低0.47元/天 解锁文章
167

被折叠的 条评论
为什么被折叠?



