用途
hardhat 是一个 R 包,用于构建建模包(modeling packages),为这类包提供一致、标准化的接口基础设施。它的核心目标是统一预处理流程,使模型包能够同时支持公式(formula)、XY(数据框/矩阵)以及 recipe 三种输入方式,并遵循 tidymodels 的实现约定。
主要能力
预处理标准化
- mold():用于训练数据的预处理,返回 predictors(tibble)、outcomes(tibble)、extras 和 blueprint。
- forge():用于预测数据的预处理,依据训练时保存的 blueprint 处理新数据。
蓝图(Blueprint)机制
提供三种默认蓝图,各自带有选项:
- default_xy_blueprint():选项 intercept。
- default_formula_blueprint():选项 intercept、indicators("traditional"、"none"、"one_hot")。
- default_recipe_blueprint():选项 intercept。
公式接口的特殊行为:默认不含截距(与 base R 不同);indicators = "none" 时保留因子不展开;多变量结果使用 y1 + y2 ~ x1 + x2 形式(而非 cbind())。
模型对象构造
new_model() 用于创建模型类对象,命名约定为 new_<model_class>(),需传入 blueprint 与 class。
预测输出格式化
spruce_*() 系列函数将预测结果标准化为 tidymodels 约定:
- spruce_numeric(pred):输出列 .pred
- spruce_class(pred):输出列 .pred_class
- spruce_prob(pred_matrix):输出列 .pred_{class_name}
验证函数
- validate_outcomes_are_univariate():检查单一结果列
- validate_prediction_size():检查输出行数等于输入行数
- validate_outcomes_are_numeric():检查结果为数值型
- validate_predictors_are_numeric():检查预测变量为数值型
forge() 自动验证
forge() 会自动校验新数据与训练数据的一致性:列名必须匹配;列类型必须兼容;因子水平必须是训练水平的子集;有损转换会发出警告(新水平 → NA)。例如:缺失列 → 报错;类型错误(因子用 double)→ 报错;因子用字符 → 静默转换;出现新因子水平 → 警告 + NA。
使用方式
构建建模包时,通常按以下架构组织代码:
阶段一:模型拟合
用户 → simple_lm() 方法(formula/xy/recipe)→ bridge → implementation → constructor。其中 bridge 调用 mold(),implementation 执行核心算法(如 lm.fit()),constructor 调用 new_model()。
- 模型构造器:new_<model_class>(),例如 new_simple_lm(),内部调用 new_model()。
- 实现函数:<model_class>_impl(),例如 simple_lm_impl(),返回模型元素的命名列表。
- 桥接函数:<model_class>_bridge(),例如 simple_lm_bridge(),将 mold() 输出转换为实现函数所需格式,并调用构造器。
- 面向用户的拟合函数:泛型 simple_lm(),并为 data.frame、matrix、formula、recipe 分别提供方法,每个方法先调用 mold() 再调用 bridge。
阶段二:模型预测
用户 → predict.simple_lm() → bridge → implementation。其中 bridge 调用 forge(),implementation 使用 switch() 分派到 predict_*_numeric() 等函数。
- 预测实现函数:每种预测类型一个函数,例如 predict_simple_lm_numeric(),使用 spruce_*() 标准化输出。
- 预测桥接函数:例如 predict_simple_lm_bridge(),转换 forge() 输出并按 type 分派。
- 面向用户的预测方法:predict.simple_lm(),先以 blueprint 调用 forge(),再调用 bridge,最后用 validate_prediction_size() 校验。
查看文档
可通过 R 打开 vignette:
- RShowDoc("mold", package = "hardhat"):为建模准备数据
- RShowDoc("forge", package = "hardhat"):为预测准备数据
- RShowDoc("package", package = "hardhat"):创建建模包
- browseVignettes("hardhat"):浏览全部 vignette
适用场景
适用于需要创建 R 建模包、并希望为公式、数据框、矩阵和 recipe 接口提供标准化预处理的开发者。也适合希望遵循 tidymodels 实现原则、统一预测输出格式与数据校验流程的建模包作者。
限制
资料未提供关于收费、价格、平台支持范围、性能效果等方面的信息,暂未提供。