评估 rmarkdown 图形标题中的内联 r 代码

Evaluate inline r code in rmarkdown figure caption

我正在使用 RStudio 和 knitr 将 .Rmd 编​​织成 .docx

我想在图形标题中包含内联代码,例如块选项中的内容类似于以下内容:

fig.cap = "Graph of nrow(data) data points"

但是,knitr 不会评估此代码,而只是打印未评估的命令。

有没有办法让 knitr 评估 figure/table 字幕中的 r 代码?

knitr 将块选项评估为 R 代码。因此,要在图形标题中包含变量值,只需使用 pastesprintf:

组成所需的字符串
fig.cap = paste("Graph of", nrow(data), "data points")

请注意,如果 data 是在 在此 块中创建的(而不是在先前的块中),这可能会出现问题,因为默认情况下会评估块选项 块本身被评估之前。

要解决此问题,请使用包选项 eval.after 让选项 fig.cap 在对块本身进行评估后进行评估:

library(knitr)
opts_knit$set(eval.after = "fig.cap")

这是一个完整的例子:

---
title: "SO"
output: 
  word_document: 
    fig_caption: yes
---


```{r fig.cap = paste("Graph of", nrow(iris), "data points.")}
plot(iris)
```


```{r setup}
library(knitr)
opts_knit$set(eval.after = "fig.cap")
```

```{r fig.cap = paste("Graph of", nrow(data2), "data points.")}
data2 <- data.frame(1:10)
plot(data2)
```

即使没有 eval.after,第一个图形标题也能正常工作,因为 iris 数据集始终可用(只要附加了 datasets)。如果没有 eval.after,生成第二个图形标题将失败,因为在评估最后一个块之前 data2 不存在。