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

将target对象作为Quarto代码块选项输入时的行为不一致问题咨询

这是预期行为,和执行环境的差异有关

你遇到的这个不一致情况其实是targets和Quarto集成时的设计逻辑导致的,完全符合预期,我给你拆解下背后的原因:

1. echo选项的执行环境

当你在Quarto代码块里用#| echo: !expr id时,这个表达式是在你运行tar_make()的主R环境里求值的。这时候你已经通过tar_load(id)把targets对象加载到了主环境中,所以id变量是存在的,echo选项能正常判断是否显示代码块。

2. eval选项的特殊执行逻辑

而eval选项就不一样了:Quarto在执行代码块的eval逻辑时,会创建一个独立的沙箱环境,这个环境不会自动继承主环境里通过tar_load()加载的变量。这是为了保证报告的可复现性,避免主环境的临时变量干扰代码块的执行。

这时候如果用#| eval: !expr id,沙箱环境里找不到id这个变量,自然就会报“object 'choice' not found”的错误。而tar_read(choice)是直接从targets的缓存目录里读取对应的对象,不需要依赖当前环境的变量,所以能在沙箱环境里正常执行。

总结正确用法

  • 控制代码块显示(echo):可以用tar_load()加载后的变量,因为是在主环境求值
  • 控制代码块执行(eval):必须用tar_read()直接读取targets对象,确保环境独立,避免报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:35:41