如何使用Knitr从R脚本函数生成多个文件

Seb*_*eki 5 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)
  #'
} 
Run Code Online (Sandbox Code Playgroud)

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

我尝试knitr::spin从单独的文件中使用以下脚本,如下所示:

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

但是我再一次只能输出一份报告,而不是三份。

Jak*_*upp 7

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

您可以通过r,循环,apply族(mapply在这种情况下)dplyr::dopurrr:map()函数中的各种方式对多组参数运行此命令。在此示例中,我使用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()
```
Run Code Online (Sandbox Code Playgroud)

渲染功能

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)
}
Run Code Online (Sandbox Code Playgroud)

运行多个参数。

library(purrr)

params_list <- list(list("mpg","mpg","mpg"),
                    list("drat","wt","qsec"))

pmap(params_list, render_report)
Run Code Online (Sandbox Code Playgroud)

输出量

三个html文件,每个文件均由参数命名,每个html文件均根据参数具有散点图。

  1. Drat vs mpg 在此处输入图片说明

  2. qsec与mpg 在此处输入图片说明

  3. wt vs mpg 在此处输入图片说明