我想从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)
但是我再一次只能输出一份报告,而不是三份。
您将制作一个rmarkdown参数化报表。在YAML中定义参数。您可以通过将参数传递到rmarkdown::render()列表中来呈现报告。
您可以通过r,循环,apply族(mapply在这种情况下)dplyr::do或purrr: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文件均根据参数具有散点图。