编写Kaplan-Meier曲线函数报错:strata_x未找到的问题求助
问题分析与解决
你的代码有两个核心问题导致报错:
- 非标准求值
{{}}误用:strata_x是字符串类型参数,{{strata_x}}会尝试在当前环境中查找名为strata_x的对象,而不是取参数传入的字符串值,这就是"object 'strata_x' not found"错误的原因。 survFormula无法在公式中解析:你提前创建的survFormula是函数内部的局部对象,但survfit的公式是基于data_x中的列进行解析的,无法识别这个局部对象。
修正后的代码
library(survival) library(survminer) survival_function <- function(data_x, strata_x = "1"){ # 直接在公式字符串中构造Surv表达式,基于data_x的列 surv_formula_str <- paste("Surv(time, status) ~", strata_x) my_survfit <- survfit(as.formula(surv_formula_str), data = data_x) ggsurvplot(my_survfit, data = data_x, pval = TRUE) } # 测试示例(用survival包的lung数据集) data(lung) # 传入字符串分组变量 survival_function(lung, "sex") # 默认单组情况 survival_function(lung)
关键修正点说明
- 公式构造方式:直接将
Surv(time, status)写入公式字符串,让survfit从data_x中读取对应列,避免局部对象无法解析的问题。 - 字符串参数直接使用:不需要
{{}},直接用strata_x的字符串值拼接公式,完美适配Shiny下拉菜单返回的字符串输入。 - 默认值兼容:当
strata_x = "1"时,公式变为Surv(time, status) ~ 1,对应单组生存曲线,符合你的初始设计。
内容的提问来源于stack exchange,提问作者ChiJoe
相关产品推荐
相关产品推荐

