我如何用R写一个函数来计算和绘制依赖自变量的Kaplan-Meier曲线?



我有一个用于生存分析的数据集my_data

  • time直到某个感兴趣的事件,
  • status编码为0和1,表示time处事件是否发生,
  • 可能影响事件发生的几个factors (factor1,factor2,…)。

我在R中分析数据,使用survivalsurvminer包,

surv_object1 <- survfit(Surv(time, status) ~ factor1, data = my_data)
ggsurvplot(surv_object1)
surv_object2 <- survfit(Surv(time, status) ~ factor2, data = my_data)
ggsurvplot(surv_object2)

等。

我不想写多行代码,而是想写一个函数,期望factor作为变量并返回生存图。

到目前为止,我试着写

survival_plot <- function(factor) {

survival_object <- survfit(Surv(time, status) ~ factor, data = my_data)
surv_plot <- ggsurvplot(survival_object)

return(surv_plot)
}

但是,当运行

survival_plot(factor1)

返回

Error in eval(predvars, data, env) : object 'factor1' not found

我已经仔细检查了因子的拼写,确保我命名的列确实存在于我的数据框架中,并且尝试了!!Sym{},但没有任何运气

我也尝试了这里指出的解决方案,但还是没有成功。

即使我能写出上面指出的行,我仍然想知道我做错了什么。任何帮助将非常感激!

一个最小的工作示例应该是

library(survival)
library(survminer)
survival_plot <- function(factor) {

s_obj <- survfit(Surv(rfstime, status) ~ factor, data = survival::gbsg)
surv_plot <- ggsurvplot(s_obj)

return(surv_plot)
}
survival_plot(meno)

对于这个线程的解

survival_function <- function(strata_x) {

gbsg$s <- Surv(gbsg$rfstime, gbsg$status)
survFormula <- as.formula(paste("s ~", strata_x))
my_survfit <- survfit(survFormula, data = gbsg)
my_survfit$call$formula <- survFormula
ggsurvplot(my_survfit, data = gbsg)
}

ggsurvplot将在s_obj$call$formula中查找适合的模型。

例如,您可以自己调用,并使用eval(parse()),或覆盖错误的调用。

survival_plot <- function(factor) {
call <- glue::glue('s_obj <- survfit(Surv(rfstime, status) ~ {factor}, data = survival::gbsg)')
eval(parse(text = call))
surv_plot <- ggsurvplot(s_obj)

return(surv_plot)
}

survival_plot2 <- function(factor) {
form <- as.formula(glue::glue('Surv(rfstime, status) ~ {factor}'))

s_obj <- survfit(form, data = survival::gbsg)
s_obj$call$formula <- form
surv_plot <- ggsurvplot(s_obj)

return(surv_plot)
}

使用

survival_plot('meno')
survival_plot2('meno')

最新更新