我想从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")
但我再次只收到一份报告,而不是三份。
答案 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文件,每个都由参数命名,每个文件都根据参数包含散点图。