grid.arrange (Gridextra) 组合存储在列表中的生存曲线时出错

grid.arrange (Gridextra) Error when combining survival curves stored in a list

这个问题的细微变化已经出现了很多,但 none 似乎对我的情节有所帮助。

我正在以进入给定计划的那一刻为条件进行生存分析(更准确地说,是进入培训后在失业中的生存)。

我有一个包含 12 个数据库的列表(供在第 1 个月到第 12 个月进入该计划的人使用),我正在做 12 个 Kaplan Meier 生存曲线(基于这 12 个数据库)也存储在一个列表中。

当我尝试使用 grid.arrange 将 12 条 Kaplan Meier 曲线放在一个网格中时,出现以下错误“gList(list(x = c(47.0657534246575, 47.0657534246575), y = c (0.262116178126773,:“gList”中只允许 'grobs'。

问题出在哪里?有其他选择吗?

library(survival)
library(survminer)
library(gridExtra)

#list containing the 12 databases
list_data_month

#Kaplan Meier estimates + curves for the 12 months
month <- c(1:12)
list_kp_month <- list() #list for Kaplan Meier estimates
list_kp_plot_month <- list() #list for Kaplan Meier curves

for(i in month){
 
 #Kaplan Meier estimates
 list_kp_month[[i]] <- survfit(Surv(time=time_t,event=status)~treatment, data=list_data_month[[i]],robust =TRUE,weights =weights)
 
 #Kaplan Meier curves
 list_kp_plot_month[[i]] <- ggsurvplot(fit = list_kp_month[[i]],
                                          palette = NULL, # Couleur, e.g. "blue"
                                          linetype = 1, # Ligne "solide"
                                          surv.median.line = "none", # Essayer "hv"
                                          conf.int = TRUE,
                                          risk.table = FALSE, # Peut être "TRUE"
                                          cumevents = FALSE,
                                          cumcensor = FALSE,
                                          tables.height = 0.25,
                                          xlab = "Months",
                                          legend = "bottom",
                                          legend.title = "",
                                          legend.labs = c("Control", "Treatment")
  )
}

#Gridextra - Combining the 12 Kaplan Meier curves together
n <- length(list_kp_plot_month)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(list_kp_plot_month, ncol=nCol))

问题是 ggsurvplot 返回的对象不是 ggplot 对象。它是 class ggsurvplot 的对象,它只是一个列表。该图本身只是此列表的一个元素,名称为 plot.

因此,要解决您的问题,您必须首先使用例如从 list_kp_plot_month 列表中提取图表lapply(list_kp_plot_month, [[, "plot")

使用 lung 数据集的简化示例:

library(survival)
library(survminer)
library(gridExtra)

# Create example data. Just 2 months
list_data_month <- list(month1 = lung, month2 = lung)

list_kp_month <- list()
list_kp_plot_month <- list()

for (i in seq_along(list_data_month)) {
  # Kaplan Meier estimates
  list_kp_month[[i]] <- survfit(Surv(time = time, event = status) ~ sex, data = list_data_month[[i]], robust = TRUE)
  # Kaplan Meier curves
  list_kp_plot_month[[i]] <- ggsurvplot(
    fit = list_kp_month[[i]],
    palette = NULL, # Couleur, e.g. "blue"
    linetype = 1, # Ligne "solide"
    surv.median.line = "none", # Essayer "hv"
    conf.int = TRUE,
    risk.table = FALSE, # Peut être "TRUE"
    cumevents = FALSE,
    cumcensor = FALSE,
    tables.height = 0.25,
    xlab = "Months",
    legend = "bottom",
    legend.title = "",
    legend.labs = c("Control", "Treatment")
  )
}

# Gridextra - Combining the 12 Kaplan Meier curves together
n <- length(list_kp_plot_month)
nCol <- floor(sqrt(n))

# Get plots from ggsurvplot objects
plots <- lapply(list_kp_plot_month, `[[`, "plot")

do.call("grid.arrange", c(plots, ncol = nCol))