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

TFi*_*nch 10 r knitr r-markdown

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

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

fig.cap =" nrow(data)数据点图"

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

有没有办法让knitr来评估图/表格标题中的r代码?

CL.*_*CL. 11

knitr将块选项评估为R代码.因此,要在图标题中包含变量值,只需使用paste或组成所需的字符串sprintf:

fig.cap = paste("Graph of", nrow(data), "data points")
Run Code Online (Sandbox Code Playgroud)

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

要解决此问题,请使用package eval.after选项fig.cap在评估块本身后评估该选项:

library(knitr)
opts_knit$set(eval.after = "fig.cap")
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子:

---
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)
```
Run Code Online (Sandbox Code Playgroud)

第一个数字标题即使没有,eval.after因为iris数据集始终可用(只要datasets已附加).生成第二个数字标题会失败,eval.after因为data2在评估最后一个块之前不存在.