评估 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 代码。因此,要在图形标题中包含变量值,只需使用 paste
或 sprintf
:
组成所需的字符串
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
不存在。
我正在使用 RStudio 和 knitr 将 .Rmd 编织成 .docx
我想在图形标题中包含内联代码,例如块选项中的内容类似于以下内容:
fig.cap = "Graph of nrow(data)
data points"
但是,knitr 不会评估此代码,而只是打印未评估的命令。
有没有办法让 knitr 评估 figure/table 字幕中的 r 代码?
knitr
将块选项评估为 R 代码。因此,要在图形标题中包含变量值,只需使用 paste
或 sprintf
:
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
不存在。