我有一个用于生存分析的数据集my_data
time
直到某个感兴趣的事件,status
编码为0和1,表示time
处事件是否发生,- 可能影响事件发生的几个
factor
s (factor1
,factor2
,…)。
我在R中分析数据,使用survival
和survminer
包,
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')