如何使用knitr从r脚本函数生成多个文件

时间:2017-01-07 19:00:56

标签: r

我想从r脚本生成一些报告。我希望避免在从rmd文件进行编译时出现重复,并且如果可能的话,我想从r脚本本身生成报告。

该脚本具有一个功能,该功能应从数据帧列表生成每个报告,其中每个报告代表一个数据帧的处理。我无法理解如何单独生成每个报告。目前报告显示一个文件中的所有数据框

原始脚本很长,所以我在下面提供了一个最小版本。

    structure(list(a = structure(c(1L, 3L, 2L), .Label = c("boo", 
    "saa", "yaew"), class = "factor"), b = structure(c(2L, 3L, 
    1L), .Label = c("mfds", "shu", "ren"), class = "factor"), c = structure(c(2L, 
    1L, 3L), .Label = c("22", "23", "5345"), class = "factor")), .Names = c("a", 
    "b", "c"), row.names = c(NA, -3L), class = "data.frame")

    ReportOp<-function(n) { 
  this_is_a_name <- n; 
  this_is_my_data <- ldf[[n]] 

  #' ---
  #' author: Me
  #' date:
  #' ---

  #+results='asis', echo=FALSE
  knitr::kable(this_is_my_data, digits = 2)
  #'
} 

目前,我只是使用R studio中的compile notebook按钮生成包含所有内容的报告。

我尝试在上面的脚本中使用knitr::spin,如下所示:

library(knitr)
o=spin('/Users/sebastianzeki/Desktop/UntitledTBB.R')
knit2html(o,output="/Users/sebastianzeki/Desktop/out.html")

但我再次只收到一份报告,而不是三份。

1 个答案:

答案 0 :(得分:4)

你会制作一个rmarkdown parameterized report。在YAML中定义参数。您可以通过将参数传递到列表中的rmarkdown::render()来呈现报表。

您可以通过r,循环,apply系列(本例中为mapply),dplyr::do或{的各种方式在多组参数上运行此参数{1}}功能。在此示例中,我使用purrr:map()

<强> Report.Rmd

purrr::pmap()

渲染功能

---
title: "`r sprintf('mtcars %s vs. %s', params$variable1, params$variable2)`"
output: html_document
params:
  variable1: "mpg"
  variable2: "cyl"
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(ggplot2)
```
#Plot
Crazy report text!

```{r cars}
ggplot(mtcars, aes_(x = as.name(params$variable1), y = as.name(params$variable2))) +
  geom_point()
```

运行多个参数。

render_report <- function(var1, var2) {

  template <- "path_to/Report.Rmd"

  out_file <- sprintf("report %s vs. %s", var2, var1)

  parameters <- list(variable1 = var1,
                     variable2 = var2)

    rmarkdown::render(template,
                      output_file = out_file,
                      params = parameters)
  invisible(TRUE)
}

<强>输出

三个html文件,每个都由参数命名,每个文件都根据参数包含散点图。

  1. drat vs mpg enter image description here

  2. qsec vs mpg enter image description here

  3. wt vs mpg enter image description here