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

时间:2015-10-09 14:08:41

标签: r knitr r-markdown

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

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

fig.cap =“nrow(data)数据点图表”

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

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

1 个答案:

答案 0 :(得分:11)

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

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

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

要解决此问题,请使用包选项eval.after在评估块本身后评估选项data

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不存在。