我正在使用RStudio和knitr将.Rmd文件编织成.docx文件。
我想在图标题中包含行内代码,例如在块选项中添加以下内容:
fig.cap = "Graph of nrow(data)
data points"
然而,knitr不会评估此代码,而只是打印未评估的命令。
是否有办法让knitr评估图/表标题中的r代码?
我正在使用RStudio和knitr将.Rmd文件编织成.docx文件。
我想在图标题中包含行内代码,例如在块选项中添加以下内容:
fig.cap = "Graph of nrow(data)
data points"
然而,knitr不会评估此代码,而只是打印未评估的命令。
是否有办法让knitr评估图/表标题中的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
,第一个图的标题也能正常工作,因为只要datasets
已经被加载,iris
数据集就一直可用。生成第二个图的标题将会失败,因为在最后一个代码块被执行之前data2
不存在。
[i]
:尝试使用 paste("graph for", colnames(dataframe))
。 - CL.{r chunkname,fig.cap=colnames(mtcars)[1:2]} for(i in 2:3){ plot(mtcars$wt,mtcars[,i]) }
- ForEverNewbie
paste("共有", nrow(data), "个数据点的图形")
。 - CL.