【R语言】用R写for循环批量绘制生存曲线,肠子都悔青了

记录自己for循环对实际情况的问题解决

一般的简单的批量绘制生存曲线直接复制粘贴代码运行没啥问题,可偏偏自己这次遇上的是不一般的分析任务,一共3个文件夹,每个文件夹有13个表格,每个表格里有41个分组,1500+个图。唯独自己犯傻,一个很简单的报错看了半天才看出来,作此记录警醒自己。

一、创建工作目录

这里懒所以直接批量创建文件夹了,用英文分号隔开,文件夹较多可先用excel处理后copy过来

在这里插入图片描述

二、简单的循环示例

#加载包
library("survminer")
library("survival")
#导入示例数据并查看
colon=colon
View(colon)

在这里插入图片描述

#提取分组变量
genes <- names(colon)[3:10]
genes
# 循环并保存图片
for (i in genes){
  print(i)
  fit <- survfit(Surv( time,status) ~ colon[,i], colon)
  p <- ggsurvplot(fit, linetype = "strata",
                  pval = TRUE,
                  palette = "Dark2",
                  legend.labs =c(paste0(i, "=H"), paste0(i, "=L")))
  pdf(paste0(i, "_surv.pdf"),width = 5, height = 5)
  print(p, newpage = FALSE)
  dev.off()
}

在这里插入图片描述

已全部导出,点开一个查看

在这里插入图片描述

三、对这个小破任务批量生存分析

#install.packages("survminer")
library(survival)  
library(survminer)
library(readxl)
library(readr)

rm(list = ls())
getwd()
setwd("C:\\Users\\xzw\\Desktop\\Q_tumor\\Target_Q_10")
data <- read_csv("Target_Q_10.csv",show_col_types = FALSE)

这里设置标题居中无需改动

###设置标题居中主题####
custom_theme <- function() 
{theme_survminer() %+replace%
 theme(plot.title=element_text(hjust=0.5))
}
##############################################for循环绘制全部生存曲线###############################################
genes <- names(data)[4:14]
data <- as.data.frame(data)
genes

在这里插入图片描述

######一重奏######
for (i in genes) {
  print(i)
  fit <- survfit(Surv(time, status) ~data[,i], data = data) #绘制两组生存曲线
    summary(fit)
    p1 <- ggsurvplot(fit,
                     data,
                     pval = TRUE, 
                     conf.int = TRUE,
                     fun="pct",
                     size=1,
                     risk.table = TRUE,
                     risk.table.col = "strata",
                     linetype = "strata", 
                     palette = c("lightseagreen", "goldenrod1"),
                     legend = c(0.8, 0.85), 
                     legend.title = "Group",
                     #legend.labs = c("Hight","Low-S"),
                     legend.labs = c("Low","Hight-S"),
                     title=paste0(i),
                     surv.median.line = "hv",
                     ggtheme=custom_theme(),
    )
    p1
    pdf(paste0(i, "_surv.pdf"),width = 7, height = 5)
    print(p1, newpage = FALSE)
    dev.off()
  }

导出结果即可查看
在这里插入图片描述
在这里插入图片描述

有人会发现为什么标签有两个,还注释了一个,因为部分举例像TNFSF,TNFRSF等起反作用的,需要标为Low,因此下面挑选出带TNF的重新跑一遍覆盖掉原图即可

#####################################################TNF修改一下列名#############################################

TNF=data[c(grep("TNF",colnames(data)))] 
genes <- names(TNF)[1:2] 
data <- as.data.frame(data)

######二重奏######
genes
for (i in genes) {
  print(i)
  fit <- survfit(Surv(time, status) ~data[,i], data = data)
  summary(fit)
  
  p1 <- ggsurvplot(fit,
                   data,
                   pval = TRUE, 
                   conf.int = TRUE,
                   fun="pct",
                   size=1,
                   risk.table = TRUE, 
                   risk.table.col = "strata",
                   linetype = "strata", 
                   palette = c("lightseagreen", "goldenrod1"), 
                   legend = c(0.8, 0.85),
                   legend.title = "Group", 
                   legend.labs = c("Hight","Low-S"),  
                   #legend.labs = c("Low","Hight-S"), 
                   title=paste0(i),
                   surv.median.line = "hv",
                   ggtheme=custom_theme(), 
  )
  p1
  pdf(paste0(i, "_surv.pdf"),width = 7, height = 5)
  print(p1, newpage = FALSE)
  dev.off()
}

在这里插入图片描述

四、讨论

其实不难,但是被自己蠢哭了,一直在排查数据类型,变量是否对齐等但其实,只是因为01分类有一组标注全是1,但是代码是跑两组间生存分析的,浪费了一整个下午的时间属实把自己整无语了。

在这里插入图片描述
总的来说用for循环的话就改一次工作目录run一次,改一次工作目录run一次,但是现在做完了,在这写反思又顿悟了,可以写个列表,把工作目录和导入文件名也写一个for循环不就可以点一次运行坐等了,梅开二度了。

R语言中,我们可以使用survival包和ggplot2包来绘制生存曲线图。下面是绘制生存曲线图的步骤: 1. 安装和加载所需的包 ```R install.packages("survival") install.packages("ggplot2") library(survival) library(ggplot2) ``` 2. 准备数据 生存曲线需要两个变量:时间和事件。时间是指从某个起始时间开始,到某个特定事件发生的时间。事件是指我们感兴趣的结果,例如死亡或治愈。在R中,我们可以使用Surv()函数来创建一个生存对象,其中第一个参数是时间,第二个参数是事件。 ```R # 创建生存对象 surv_object <- Surv(time, event) ``` 3. 计算生存曲线的估计值 我们可以使用survfit()函数来计算生存曲线的估计值。该函数需要一个生存对象作为输入,并返回一个生存对象的估计值。 ```R # 计算生存曲线的估计值 surv_fit <- survfit(surv_object ~ group, data = mydata) ``` 其中,group是指我们要比较的两个或多个组别,mydata是包含时间、事件和组别信息的数据框。 4. 绘制生存曲线图 我们可以使用ggsurvplot()函数来绘制生存曲线图。该函数需要一个生存对象的估计值作为输入,并返回一个ggplot2对象。 ```R # 绘制生存曲线图 ggsurvplot <- ggsurvplot(surv_fit, data = mydata, conf.int = TRUE, pval = TRUE, xlab = "Time", ylab = "Survival Probability", main = "Survival Curve") print(ggsurvplot) ``` 其中,conf.int和pval参数用于控制是否显示置信区间和p值,xlab和ylab参数用于设置x轴和y轴的标签,main参数用于设置图表的标题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bioinfo Guy

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值