使用 r 中的循环创建包含文本字符串和图表的简单报告

Create a simple report with text strings and plots using loop in r

我正在尝试找到一种方法来循环遍历数据框的行以生成报告(最好是 PDF 格式),其中包括一段长度或更长的字符串、图表和每天的数据值那一年。我以前在一个循环中导出了只是图的 PDF,但我找不到包含任何相当长的文本的解决方案。

假设我有一个这样的数据框:

Date <- c("01/01/2014", "01/02/2014", "01/03/2014")
TextString <- c("imagine this is a paragraph or longer 1", "imagine this is a paragraph or longer 2", "imagine this is a paragraph or longer 3")
TableData1 <- c(10000, 9000, 8000)
TableData2 <- c(6, 5, 4)
PlotData3 <- c(22, 11, 21)
PlotData4 <- c(6, 7, 8)
PlotData5 <- c(21, 17, 14)
Report <- data.frame(Date, TextString, TableData1, TableData2, PlotData3, PlotData4, PlotData5)

而且我希望报告的 PDF 结构如下所示:

01/01/2014
imagine this is a paragraph or longer 1
"TableData1:" 10000 
"TableData2:" 6 
*plot* pie(c(Report$PlotData3[1], Report$PlotData4[1], Report$PlotData5[1]))

01/02/2014
imagine this is a paragraph or longer 2
"TableData1:" 9000 
"TableData2:" 5 
*plot* pie(c(Report$PlotData3[2], Report$PlotData4[2], Report$PlotData5[2]))  

01/03/2014
imagine this is a paragraph or longer 3
"TableData1:" 8000 
"TableData2:" 4 
*plot* pie(c(Report$PlotData3[3], Report$PlotData4[3], Report$PlotData5[3])) 

谁能指出我正确的方向?我查看了 knitr 的一些教程,因为它似乎适用,但我不确定它是否会以这种方式循环遍历数据。

这可以使用 R Markdown 轻松完成。如果您使用的是 RStudio,这将变得非常简单。请按照以下步骤操作:

  1. 打开一个新的 R Markdown 文件。 (文件 -> 新建文件 -> R Markdown...
  2. 选择标题和输出格式。 (这些也可以在结果中修改header)
  3. 将以下内容粘贴到 R Markdown 文件中。
  4. 点击编织按钮。
  5. RStudio 自动将 R Markdown 处理成所需的格式。

下面的 .Rmd (R Markdown) 文件将在 HTML 中生成您想要的内容。如果您的计算机上安装了 LaTeX,将 header 中的输出行更改为 pdf_document 应该会生成 PDF 文件。

---
title: "Test PDF"
author: "Daddy The Runner"
date: "Monday, January 05, 2015"
output: html_document
---

```{r echo=FALSE, comment=NA}
Date <- c("01/01/2014", "01/02/2014", "01/03/2014")
TextString <- c("imagine this is a paragraph or longer 1", "imagine this is a paragraph or longer 2", "imagine this is a paragraph or longer 3")
TableData1 <- c(10000, 9000, 8000)
TableData2 <- c(6, 5, 4)
PlotData3 <- c(22, 11, 21)
PlotData4 <- c(6, 7, 8)
PlotData5 <- c(21, 17, 14)
Report <- data.frame(Date, TextString, TableData1, TableData2, PlotData3, PlotData4, PlotData5, stringsAsFactors = FALSE)

for (i in 1:nrow(Report)) {
  cat(Report$Date[i], "\n")
  cat(Report$TextString[i], "\n")
  cat("TableData1: ", Report$TableData1[i], "\n")
  cat("TableData2: ", Report$TableData2[i], "\n")
  pie(c(Report$PlotData3[i], Report$PlotData4[i], Report$PlotData5[i]))
  cat("\n")
}
```