2015-10-09 29 views
6

我使用RStudio和knitr編織.Rmd爲.docx評估在rmarkdown圖題內嵌R代碼裏面

我想包括圖字幕例如內嵌代碼像在塊選項如下:

fig.cap =

「的nrow(data)數據點圖」然而,knitr不評估此代碼,而不是僅僅打印未計算的命令。

有沒有辦法讓knitr評估圖形/表格標題中的r代碼?

+0

請嘗試粘貼(「圖的」,nrow(數據),「數據點」)'。 –

回答

8

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在最後一個數據塊被評估之前不存在。