目录

  • 记录自己for循环对实际情况的问题解决
  • 一、创建工作目录
  • 二、简单的循环示例
  • 三、对这个小破任务批量生存分析
  • 四、讨论


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

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

一、创建工作目录

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

R语言如何循环读取多个数据 r语言for_云计算

二、简单的循环示例

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

R语言如何循环读取多个数据 r语言for_for循环_02

#提取分组变量
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()
}

R语言如何循环读取多个数据 r语言for_R语言如何循环读取多个数据_03

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

R语言如何循环读取多个数据 r语言for_python_04

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

#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

R语言如何循环读取多个数据 r语言for_r语言_05

######一重奏######
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()
  }

导出结果即可查看

R语言如何循环读取多个数据 r语言for_R语言如何循环读取多个数据_06


R语言如何循环读取多个数据 r语言for_R语言如何循环读取多个数据_07

有人会发现为什么标签有两个,还注释了一个,因为部分举例像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()
}

R语言如何循环读取多个数据 r语言for_r语言_08

四、讨论

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

R语言如何循环读取多个数据 r语言for_R语言如何循环读取多个数据_09


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