如何在Quarto的#| fig-cap配置项中添加内联R代码
Quarto动态图注对象不存在问题解决方案
问题补充(更新)
使用内置mtcars数据集时功能运行正常,调用自行加载的数据框时触发如下报错:
Fehler in nrow(df_xxx) : Objekt 'df_xxx' nicht gefunden Ruft auf: paste -> nrow Fehler in yaml::yaml.load(meta, eval.expr = TRUE) : Could not evaluate expression: paste(nrow(df_xxx), "blabla") Ruft auf: .main ... FUN -> parse_block -> partition_chunk -> <Anonymous> Ausf�hrung angehalten
报错根因:Quarto会优先解析#|开头的块级YAML配置,解析阶段自定义的df_xxx尚未生成,即便对象存在于运行环境也无法被访问。
原始问题
可正常运行的Quarto基础示例:
--- title: "test" format: revealjs --- ## Quarto example ```{r} #| label: fig-plot_mtcars #| fig-cap: nrow(mtcars). plot(mtcars$mpg, mtcars$disp)
*正常运行效果:*  *核心需求:* 在`fig.cap`配置项中嵌入内联代码,动态生成图注,预期效果如下:  直接使用`#| fig-cap: paste("bla", nrow(mtcars))`写法时,会出现前述自定义数据框无法识别的报错。 --- ## 解决方法 两种方案均可彻底解决该问题: - **方案1:提前初始化依赖对象** 将自定义数据框的加载、生成逻辑放在文档最开头的setup代码块中,设置为优先执行: ```qmd ```{r} #| include: false # 提前加载/生成所有后续块配置需要用到的对象 df_xxx <- read.csv("your_data_path.csv")
后续所有代码块的YAML配置可直接访问提前生成的对象,直接在`fig-cap`中写R表达式即可。 - **方案2:块内动态设置图注** 无需调整代码顺序,在绘图代码块内部通过`knitr::opts_current$set()`动态赋值图注,赋值逻辑跟随代码块执行顺序运行,可直接访问同块内生成的所有对象: ```qmd ```{r} #| label: fig-custom_plot # 先生成自定义数据框 df_xxx <- data.frame(x = 1:20, y = runif(20)) # 动态设置图注 knitr::opts_current$set(fig.cap = paste0("数据共包含", nrow(df_xxx), "行观测")) # 执行绘图 plot(df_xxx$x, df_xxx$y)
--- 内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

