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

自定义Recipe步骤依赖结果变量时Tidymodels预测报错的解决

解决tidymodels自定义step_limma预测时的target列缺失问题

问题背景

为基于基因表达的分类器实现了自定义tidymodels recipe步骤step_limma,该步骤利用limma进行二元结果变量的差异表达分析,筛选指定数量的特征基因。但在使用predict函数对不含结果变量target的测试集进行预测时,bake阶段的dplyr::select操作因尝试选择不存在的target列而报错。

解决方案

修改bake.step_limma函数,增加对new_data中是否存在target列的判断:

  • 处理训练数据(包含target列)时,保留target和选中的特征
  • 处理测试/预测数据(无target列)时,仅保留选中的特征

修改后的代码

仅需替换原有的bake.step_limma函数:

bake.step_limma <- function(object, new_data, ...) {
    # 判断target列是否存在于new_data中
    if (object$target %in% colnames(new_data)) {
        new_data <- new_data %>% dplyr::select(object$target, dplyr::all_of(object$features))
    } else {
        new_data <- new_data %>% dplyr::select(dplyr::all_of(object$features))
    }
    new_data
}

验证效果

替换上述函数后,重新运行预测代码:

fit %>% predict(set_test)

此时将正常返回预测结果,不再出现target列缺失的报错。

补充说明

tidymodels在预测阶段会自动剥离测试集中的结果变量(如果存在),但如果测试集本身就不含target列,自定义步骤的bake操作必须兼容这种情况。通过条件判断可以确保步骤在训练和预测阶段都能正确运行。

内容的提问来源于stack exchange,提问作者Patrick Gauthier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 18:07:33