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

R版本更新后绘图报错:attempt to use zero-length variable name求助

R版本更新后生存分析绘图报错:attempt to use the zero-length variable name

问题背景

旧版本R中可正常运行的生存分析绘图代码,更新R版本后执行报错,错误提示指向绘图代码行:

attempt to use the zero-length variable name

已尝试增大绘图高度,问题未解决。

涉及代码

fit8 <- survfit(Surv(SG,Statut) ~ MMR, data = colon)
names(fit8$strata) <- gsub("MMR=", "", names(fit8$strata)) # 移除图例中变量名前缀"MMR="
graph8 <- ggsurvplot(fit8, data = colon,           
                     xlab = "Time in months", 
                     break.time.by = 12, 
                     xlim = c(0,84), 
                     pval=TRUE,           
                     risk.table = TRUE, 
                     risk.table.height = 0.38,           
                     legend.title="",  # 移除图例标题,可自定义内容
                     surv.median.line = "hv",            
                     title = "Overall survival", 
                     font.main = c(13, "black"),           
                     palette = c("#441199","#EE6677","#8FD175","#CCBB44","#66CCEE"),           
                     legend = "right")

排查与解决方案

核心原因

新版本survival或survminer包对strata命名的校验更严格。你通过gsub("MMR=", "", names(fit8$strata))移除前缀时,若原strata名称存在MMR=后无内容的情况(比如数据中MMR变量有空值或空白水平),就会生成空字符串的strata名称,触发零长度变量名错误。

修复步骤

  1. 检查替换后的strata名称
    先确认是否存在空名称:

    print(names(fit8$strata))
    
  2. 避免生成空名称
    修改替换逻辑,为空名称设置默认值(比如"Unknown"):

    names(fit8$strata) <- sapply(names(fit8$strata), function(x) {
      new_name <- gsub("MMR=", "", x)
      ifelse(new_name == "", "Unknown", new_name)
    })
    
  3. 改用ggsurvplot自带参数修改图例
    无需手动修改fit8$strata,直接用legend.labs指定图例标签,更安全:

    # 先获取MMR的所有有效水平(按strata顺序)
    mmr_levels <- levels(colon$MMR)
    # 或手动填写对应标签,顺序要与strata一致
    graph8 <- ggsurvplot(fit8, data = colon,           
                         xlab = "Time in months", 
                         break.time.by = 12, 
                         xlim = c(0,84), 
                         pval=TRUE,           
                         risk.table = TRUE, 
                         risk.table.height = 0.38,           
                         legend.title="",
                         legend.labs = mmr_levels, # 直接使用原变量水平,或自定义如c("MSI-H", "MSS", ...)
                         surv.median.line = "hv",            
                         title = "Overall survival", 
                         font.main = c(13, "black"),           
                         palette = c("#441199","#EE6677","#8FD175","#CCBB44","#66CCEE"),           
                         legend = "right")
    
  4. 更新依赖包到兼容版本
    确保survival和survminer是最新版,避免版本兼容问题:

    install.packages(c("survival", "survminer"))
    

内容的提问来源于stack exchange,提问作者Thibault Avot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:13:20