You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ggsurvplot遇行数不一致报错:多删失值设置问题求助

ggsurvplot多删失值配置下的行数不匹配报错解决

问题场景

使用survival和survminer包绘制生存曲线时,通过外部变量指定多个删失值会触发行数不匹配错误,但直接将数值写入公式则正常运行。报错提示:

Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, : arguments imply differing number of rows: 1169, 2

复现代码

出错的代码:

library(survival)
library(survminer)

cnsr_values <- c(1,2)
fit <- surv_fit(Surv(AVAL, !CNSR %in% cnsr_values) ~ TRTKEY, data = testdata)
myplot <- ggsurvplot(fit, data = testdata, conf.int = FALSE)

可正常运行的代码(直接写入数值):

fit <- surv_fit(Surv(AVAL, !CNSR %in% c(1,2)) ~ TRTKEY, data = testdata)
myplot <- ggsurvplot(fit, data = testdata, conf.int = FALSE)

额外测试发现:将数据集截断为testdata[1:1168,]传入ggsurvplot也能正常运行,且两种方式生成的fit对象无明显差异。

解决方案

方案1:提前生成事件指示变量

在数据集中预先计算事件标记列,避免公式解析时的环境混淆:

testdata$event_flag <- !testdata$CNSR %in% c(1,2)
fit <- surv_fit(Surv(AVAL, event_flag) ~ TRTKEY, data = testdata)
myplot <- ggsurvplot(fit, data = testdata, conf.int = FALSE)

方案2:用I()包裹逻辑表达式

强制R正确解析公式中的外部变量,避免维度识别错误:

cnsr_values <- c(1,2)
fit <- surv_fit(Surv(AVAL, I(!CNSR %in% cnsr_values)) ~ TRTKEY, data = testdata)
myplot <- ggsurvplot(fit, data = testdata, conf.int = FALSE)

原因说明

问题根源是公式解析环境的混淆:当在Surv函数中引用外部向量cnsr_values时,surv_fit没有正确将逻辑表达式解析为与数据集行数一致的事件向量,导致ggsurvplot匹配数据时误将cnsr_values的长度(2)当成数据行数,触发不匹配错误。上述两种方案都能让surv_fit正确识别事件向量的维度,解决报错问题。

内容的提问来源于stack exchange,提问作者Elin Zhang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:25:27