用途
targets-pipelines 是一份面向 targets R 包使用者的技能文档,用于指导编写复杂的 targets 流水线,尤其是涉及分支(branching)、批处理(batching)和自定义目标工厂(target factories)的场景。当用户需要从单个定义生成多个相似目标、进行参数扫描、方法比较或批量模拟时,该文档提供决策依据和代码模式。
主要能力
文档围绕四种核心模式展开:
-
静态分支(Static Branching):在 tar_make() 运行前已知迭代次数时使用,通过 tarchetypes::tar_map() 生成具有友好名称的目标(如 result_bayesian、result_freq)。可用 tarchetypes::tar_combine() 聚合结果,需配合 unlist = FALSE 使用。函数名必须用 rlang::syms() 转为符号,不能使用字符串。
-
动态分支(Dynamic Branching):当分支数量取决于数据或需要大规模扩展时使用,通过 pattern 参数实现。支持 map(x, y) 并行迭代、cross(x, y) 笛卡尔积、slice()、head()、tail()、sample() 等子集操作。关键限制是 pattern 只能引用上游目标名称,不能引用外部 R 对象或表达式。
-
混合模式(Hybrid):结合静态分支(方法/变体)与动态分支(重复实验),使用 tarchetypes::tar_map_rep(),可指定 batches 和 reps 参数。
-
目标工厂(Target Factories):返回预配置目标对象的函数,使用 targets::tar_target_raw() 和元编程技术封装可复用的多目标模式。
文档还包含决策树,帮助用户根据迭代是否已知、是否需要友好命名等条件选择合适方案。
使用方式
文档提供验证与调试命令:
targets::tar_manifest()在运行前检查目标定义,可指定 fields 参数。targets::tar_visnetwork(targets_only = TRUE)可视化 DAG。targets::tar_pattern()在不运行流水线的情况下测试 pattern 逻辑。targets::tar_meta()配合 dplyr::filter(error != "") 识别失败分支。targets::tar_read(target_name, branches = 1)按索引读取特定分支。targets::tar_branches(target_name)检查所有分支元数据。
调试策略包括:先用 tar_manifest() 验证目标数量和命令;用 pattern = head(x, n = 3) 进行子集测试;在分支输出中加入参数值以便追溯;先检查上游依赖。
适用场景
- 方法比较(如贝叶斯与频率学派方法对比)
- 参数扫描与模拟实验
- 大规模文件处理(动态分支可支持 10 万以上目标)
- 方法 × 重复实验的组合场景
- 需要封装可复用多目标模式的包开发
限制
- 静态分支适合少于 1000 个目标,动态分支适合 10 万以上目标。
- 动态分支的目标名称是哈希值(如 analysis_3a7f2b),可读性差。
- 动态分支必须运行后才能看到分支,tar_manifest() 只能提供部分验证。
- pattern 不能引用外部对象,必须创建上游目标。
- 函数名必须使用 rlang::syms(),字符串不可调用。
- 使用 tar_combine() 时 tar_map() 必须设置 unlist = FALSE。
- 在 expand_grid() 内使用 syms() 不会展开,需在网格创建后再应用 syms()。
参考文件
文档引用多个主题文件:topic-static-branching.md、topic-dynamic-branching.md、topic-hybrid-branching.md、topic-target-factories.md,以及 references/tarchetypes-functions.md、references/pattern-composition.md、references/targets-utilities.md 和模板文件 templates/static-branching.R、templates/target-factory.R。外部资源包括 targets 文档、tarchetypes 包及 targets 手册中关于动态和静态分支的章节。