Цикл, чтобы применить код к разным данным и сохранить графики в R - PullRequest
1 голос
/ 07 апреля 2019

У меня есть датафрейм df, который выглядит следующим образом:

df <- structure(list(times = c(724L, 1624L, 1569L, 2532L, 1271L, 2442L, 
757L, 848L, 3675L, 1229L, 1582L, 1257L, 1270L, 555L, 357L, 1133L, 
633L), Samples = structure(c(1L, 10L, 11L, 12L, 13L, 14L, 15L, 
16L, 17L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L), .Label = c("Sample1", 
"Sample10", "Sample11", "Sample12", "Sample13", "Sample14", "Sample15", 
"Sample16", "Sample17", "Sample2", "Sample3", "Sample4", "Sample5", 
"Sample6", "Sample7", "Sample8", "Sample9"), class = "factor"), 
    vital_status = c(1L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 
    0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L), years = c(1.983561644, 
    4.449315068, 4.298630137, 6.936986301, 3.482191781, 6.690410959, 
    2.073972603, 2.323287671, 10.06849315, 3.367123288, 4.334246575, 
    3.443835616, 3.479452055, 1.520547945, 0.978082192, 3.104109589, 
    1.734246575), Gene1 = c(0.9, 0.8, 0.6, 1.2, 3.8, 2.3, 3.8, 
    0.4, 0.5, 1.2, 7.7, 2.1, 0.8, 1.8, 2.4, 3, 0.6), Gene2 = c(1.2, 
    3.8, 2.3, 3.8, 0.4, 0.5, 1.2, 7.7, 2.1, 0.9, 0.8, 0.6, 0.5, 
    1.2, 7.7, 2.1, 0.6), Gene3 = c(2.3, 3.8, 0.4, 0.5, 1.2, 7.7, 
    0.9, 0.8, 0.6, 0.5, 1.2, 7.7, 2.1, 0.6, 0.9, 0.8, 0.6), Gene4 = c(3.8, 
    0.4, 0.5, 1.2, 7.7, 2.1, 0.8, 1.8, 2.4, 3, 0.6, 0.9, 0.8, 
    0.6, 1.2, 3.8, 2.3), Gene5 = c(0.5, 1.2, 7.7, 0.9, 0.8, 0.6, 
    0.5, 1.2, 7.7, 2.1, 0.6, 0.9, 1.2, 7.7, 2.1, 0.9, 0.8)), class = "data.frame", row.names = c(NA, 
-17L))

Используя приведенные выше данные, я применяю следующий код в R, изначально в Gene1

library(survminer)
surv_rnaseq.cut <- surv_cutpoint(
  df,
  time = "years",
  event = "vital_status",
  variables = c("Gene1")
)

pdf("Gene1_Cuttpt.pdf")
plot(surv_rnaseq.cut, "Gene1", palette = "npg")
dev.off()

surv_rnaseq.cat <- surv_categorize(surv_rnaseq.cut)

library(survival)
fit <- survfit(Surv(years, vital_status) ~ Gene1,
               data = surv_rnaseq.cat)
pdf("Gene1_Survival_high_vs_low_WithPvalue.pdf")
ggsurvplot(fit,
           pval = TRUE, conf.int = FALSE,
           risk.table = TRUE, # Add risk table
           risk.table.col = "strata", # Change risk table color by groups
           linetype = "strata", # Change line type by groups
           surv.median.line = "hv", # Specify median survival
           ggtheme = theme_bw(), # Change ggplot2 theme
           palette = c("#FF0027", "#060606"),
           xlim = c(0,10),
           break.x.by = 3,
           xlab="Time in years",
           risk.table.y.text.col = T, # colour risk table text annotations.
           risk.table.y.text = FALSE)
dev.off()

Я хочу применить тот же код к другим генам (Gene2, Gene3, Gene4, Gene5) и сохранить все графики одновременно, используя R loop

Может кто-нибудь сказать мне, как это сделать. Заранее спасибо.

1 Ответ

1 голос
/ 08 апреля 2019

Я не запускал его, так как у меня нет данных. Если есть ошибка, пожалуйста, предоставьте некоторые данные. Код будет что-то вроде этого

library(survminer)
library(survival)
# vector with the variables to run through
genes <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5") 

for(i in 1:length(genes)){
surv_rnaseq.cut <- surv_cutpoint(
  df,
  time = "years",
  event = "vital_status",
  variables = c(genes[i]))

pdf(paste0(genes[i], "_Cuttpt.pdf"))
print(
plot(surv_rnaseq.cut, genes[i], palette = "npg")
)
dev.off()

surv_rnaseq.cat <- surv_categorize(surv_rnaseq.cut)


fit <- survfit(as.formula(paste0("Surv(years, vital_status) ~", genes[i])),
               data = surv_rnaseq.cat)

pdf(paste0(genes[i], "_Survival_high_vs_low_WithPvalue.pdf"))

print(
ggsurvplot(fit,
        pval = TRUE, conf.int = FALSE,
       risk.table = TRUE, # Add risk table
       risk.table.col = "strata", # Change risk table color by groups
       linetype = "strata", # Change line type by groups
       surv.median.line = "hv", # Specify median survival
       ggtheme = theme_bw(), # Change ggplot2 theme
       palette = c("#FF0027", "#060606"),
       xlim = c(0,10),
       break.x.by = 3,
       xlab="Time in years",
       risk.table.y.text.col = T, # colour risk table text annotations.
       risk.table.y.text = FALSE)
)
dev.off()
}

Таким образом, вы можете использовать функцию paste () и выбрать Gene 1-5 с i из векторных генов. Это заменяет ситуации, когда в коде был «Gene1». В случае формулы в выживаемости вы можете не просто использовать символы, но, к счастью, вы можете сделать это, заключив их в as.formula (). Все остальное остается примерно таким же, и pdf () и т. Д. Создадут графики Гена, отобранные с генами [i].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...