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

如何处理pec::pec函数中含连字符的变量识别问题

解决pec函数中带连字符变量"MT-ATP6"找不到的问题

以下是针对该报错的具体解决方法:

  • 检查公式的实际解析结果
    先确认total.formula被解析后的真实格式,避免字符串转公式时丢失反引号:

    # 查看公式结构
    str(total.formula)
    # 打印公式文本
    cat(deparse(total.formula), "\n")
    

    如果total.formula是字符串类型,确保反引号被正确转义,正确的字符串写法应为:

    total.formula <- "Surv(surv_days, surv_status_recode) ~ `MT-ATP6` + GAPDH + GH1 + MB"
    

    再用as.formula()转换,或直接使用formula()函数构造。

  • 直接在pec函数内构造公式
    跳过total.formula变量,直接在pec的formula参数中写带反引号的变量,避免中间转换的问题:

    pec <- pec::pec(object = models,
                    formula = Surv(surv_days, surv_status_recode) ~ `MT-ATP6` + GAPDH + GH1 + MB, 
                    data = combined_data_sub, 
                    exact = TRUE,
                    splitMethod = "BootCv", 
                    B = 500)
    
  • 验证数据框列名一致性
    确认数据框的列名与公式中的变量完全匹配,没有拼写或格式差异:

    # 打印所有列名
    print(colnames(combined_data_sub))
    # 检查目标列是否存在
    "MT-ATP6" %in% colnames(combined_data_sub)
    
  • 重命名列名避开特殊字符
    如果上述方法无效,直接将带连字符的列名改为下划线格式,彻底避免解析问题:

    # 重命名列
    colnames(combined_data_sub)[colnames(combined_data_sub) == "MT-ATP6"] <- "MT_ATP6"
    # 更新公式并运行pec
    pec <- pec::pec(object = models,
                    formula = Surv(surv_days, surv_status_recode) ~ MT_ATP6 + GAPDH + GH1 + MB, 
                    data = combined_data_sub, 
                    exact = TRUE,
                    splitMethod = "BootCv", 
                    B = 500)
    
  • 检查模型训练时的变量引用
    确保models列表中的所有模型在训练阶段,都使用了正确的变量引用方式(带反引号的MT-ATP6或重命名后的MT_ATP6)。如果模型训练时就因变量名问题存在隐性错误,需要重新训练模型。

内容的提问来源于stack exchange,提问作者Komal Rathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 05:20:28