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

求助:targets包tar_map()的values参数无法识别已有target的问题

解决tar_map引用上游target作为values的问题

问题原因

原代码报错object 'config' not found,是因为tar_map的values参数在target定义阶段就会被求值,此时config这个target还未运行,无法获取其值。而用tar_read(config)虽然能拿到值,但不会在targets的依赖图谱中注册依赖,导致config更新时,下游的result targets不会自动重新运行。

正确解决方案

使用tarchetypes::tar_eval()包裹values的定义,让targets识别上游依赖并延迟求值到运行阶段,同时保留依赖追踪:

library(targets)
tar_script({
    library(tarchetypes)
    list(
         tar_target(config, c("a", "b", "c")), 
         tar_map(
           values = tar_eval(list(configs = config), config), 
           tar_target(result, paste0(configs, "1"))
          )
        )
})
tar_make()

适配配置文件需求

如果要让终端用户仅修改配置文件即可更新参数,可将config target改为读取外部配置文件(如YAML/CSV),无需修改代码:

  1. 创建配置文件config.yaml:
items: ["a", "b", "c"]
  1. 修改target脚本:
library(targets)
tar_script({
    library(tarchetypes)
    library(yaml)
    list(
         tar_target(config, yaml::read_yaml("config.yaml")$items), 
         tar_map(
           values = tar_eval(list(configs = config), config), 
           tar_target(result, paste0(configs, "1"))
          )
        )
})

这样用户只需编辑config.yaml中的参数列表,即可更新tar_map的values,无需改动R代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:12:28