使用 knitr 在 R 中重现 ad-hoc 报告

Reproducible ad-hoc report in R with knitr

首先我是 R 编程新手。我还发现了一些非常接近我无法解决但最终没有真正帮助我的话题。

我继承了一份报告,该报告将一些图表以.png 图像的形式粘贴到文件夹中,然后将其编织成一份word 报告。

我已经设法使 someScriptIn.R 部分自动化,它能够分析 .csv 文件以找出它必须分析多少数据集并正确设置标题、日期等。它可以很好地生成图像。

你要知道我想做的是在数据集的数量、标题等方面有一个动态变化的报告。所以它不会让我们说每次都有 3 组图像。它可能是 1 也可能是 10。这将取决于用户。 Series.title 也是在 someScriptIn.R 和 Series.quarter.

中创建的变量

当我尝试将 knitr 与类似于以下代码的 .rmd 文件一起使用时,问题就出现了。

代码:

---
output: word_document
---


```{r, echo=FALSE, results='hide'}
# source(".../someScriptIn.R") # this will produce the graphs
```
`r Series.title[1]` `r Series.quarter` Quarters Forecast # here Series.title[1] is Group 1
  ![](graph1-1.png)
  ![](graph2-1.png)
  ![](graph3-1.png)
`r Series.title[1]` `r Series.quarter` Quarters Forecast # here Series.title[2] is Group 2
  ![](graph1-2.png)
  ![](graph2-2.png)
  ![](graph3-2.png)
`r Series.title[1]` `r Series.quarter` Quarters Forecast # here Series.title[3] is Group 3
  ![](graph1-3.png)
  ![](graph2-3.png)
  ![](graph3-3.png)

问题是如何使用 for 循环完成这个过程,同时要记住图形是已经在文件夹中创建的图像? this 解决方案是否能够解决我的问题?实施方式是什么?

使用一个"asis"块:

---
output: 
  word_document
---


```{r, results="asis", echo=FALSE}
cat("First part of report\n\n")
cat(paste0("![bb](a",1:3,".png)", sep="", collapse="\n\n"))
```

文件为 a1.png, a2.png, a3.png.

的简化假设

您可以使用 2 个 for 循环和 sprintf 函数来完成:

```{r, results='asis', echo=FALSE}
Series.title <- c("Group 1", "Group 2", "Group 3")
Series.quarter <- "SQ?"

for (i in 1:3) {
    cat(sprintf("%s %s Quarters Forecast \n\n", Series.title[i], Series.quarter))
    for (j in 1:3) {
        cat(sprintf("![](graph%i-%i.png) \n", j, i))
    }
}
```

for 循环的输出:

Group 1 SQ? Quarters Forecast 

![](graph1-1.png) 
![](graph2-1.png) 
![](graph3-1.png) 
Group 2 SQ? Quarters Forecast 

![](graph1-2.png) 
![](graph2-2.png) 
![](graph3-2.png) 
Group 3 SQ? Quarters Forecast 

![](graph1-3.png) 
![](graph2-3.png) 
![](graph3-3.png)