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

如何基于已有目标迭代创建targets::tar_target()类型新目标

解决方案

方案1:使用tarchetypes包的tar_eval()函数(官方推荐)

该工具是targets生态专门为批量生成target设计,静态分析可正确识别依赖,无需手动处理符号转换。

  • 实现步骤:
  1. 先准备参数配置表,例如命名为col_config,包含字段:col_name(新计算列名)、depend_table(依赖的已有target名称,字符串格式),以及替换NA、取对数、标准化等处理参数
  2. 先在_targets.R中定义所有Oracle表对应的独立target
  3. 批量生成计算列target的代码示例:
library(targets)
library(tarchetypes)
library(purrr)

# 参数配置表示例
col_config <- tibble::tibble(
  col_name = c("col1", "col2", "col3"),
  depend_table = c("table_a", "table_b", "table_a"),
  replace_na = c(TRUE, FALSE, TRUE),
  log_transform = c(FALSE, TRUE, FALSE),
  z_score = c(TRUE, FALSE, TRUE)
)

# 批量生成target
compute_targets <- tar_eval(
  tar_target(
    name = !!rlang::sym(col_name),
    command = process_column(
      data = !!rlang::sym(depend_table),
      replace_na = replace_na,
      log_transform = log_transform,
      z_score = z_score
    ),
    format = "rds"
  ),
  values = col_config
)

# 把所有target加入全局列表
list(
  # 已定义的Oracle表target
  tar_target(table_a, pull_oracle_data("schema.table_a"), format = "rds"),
  tar_target(table_b, pull_oracle_data("schema.table_b"), format = "rds"),
  # 批量生成的计算列target
  compute_targets
)
  • 原理:tar_eval()会在静态分析阶段就把配置中的字符串参数替换为对应符号,targets的依赖检查可正确识别每个计算列对应的上游表target,不会出现依赖识别失败的问题。

方案2:手动构造target列表拼接

如果不想额外依赖tarchetypes,可以直接遍历配置表,将字符串转为符号后生成target对象,再拼接至全局target列表:

# 遍历配置表生成target列表
compute_targets <- pmap(col_config, function(col_name, depend_table, replace_na, log_transform, z_score) {
  tar_target(
    name = !!rlang::sym(col_name),
    command = process_column(
      data = !!rlang::sym(depend_table),
      replace_na = replace_na,
      log_transform = log_transform,
      z_score = z_score
    ),
    format = "rds"
  )
})

# 拼接至全局target列表即可
list(
  tar_target(table_a, pull_oracle_data("schema.table_a"), format = "rds"),
  tar_target(table_b, pull_oracle_data("schema.table_b"), format = "rds"),
  compute_targets
)

注意事项

  • 所有计算逻辑必须封装为纯函数,不要在target的command中写硬编码变量,避免依赖识别错误
  • 可运行tar_visnetwork()检查依赖关系,确认每个计算列的上游依赖和预期一致
  • 单表数据量较大时,可在处理函数中只读取需要的字段,无需全表加载到内存,进一步优化内存占用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:48:00