如何生成和编制.Rmd报告的个性化版本?

如何生成和编制.Rmd报告的个性化版本?,r,r-markdown,flexdashboard,R,R Markdown,Flexdashboard,我创建了一个报告PerfReport.Rmd,它将一个人的绩效与一个大团队的绩效进行比较。我有数百个人应该收到这份报告的个人化版本,将他们自己的表现与大群体进行比较 我看到的障碍是: 1.我需要每个文件名都包含这个人的名字。 2.每个文件都有特定于个人的计算 下面是一个例子 --- title: "Course Success" output: html_document: flexdashboard::flex_dashboard pdf_document: default --- ---

我创建了一个报告PerfReport.Rmd,它将一个人的绩效与一个大团队的绩效进行比较。我有数百个人应该收到这份报告的个人化版本,将他们自己的表现与大群体进行比较

我看到的障碍是: 1.我需要每个文件名都包含这个人的名字。 2.每个文件都有特定于个人的计算

下面是一个例子

---
title: "Course Success"

output:
html_document: flexdashboard::flex_dashboard
pdf_document: default

---
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(dplyr)
library(plotly)
```

```{r comp, echo=FALSE, message=FALSE,warning=FALSE}

df<-data.frame(Person=c('a','a','a','a','a','b','b','b','b','b','c','c','c','c','c','d','d','d','d','d'),
           Success=c(1,0,1,1,0,1,0,0,0,0,1,1,1,1,1,0,1,0,0,1),
           Valid=c(1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1))

testperson<-'b'

comparison<-df%>%
  transmute(Your_Rate=sum(Success[Person==testperson])/sum(Valid[Person==testperson]),
        Baseline=sum(Success[Person!=testperson])/sum(Valid[Person!=testperson]))%>%
  distinct(Your_Rate,.keep_all = TRUE)

plot_ly(comparison,y=~Your_Rate, type='bar')%>%
  add_trace(y=~Baseline)

```
---
标题:“课程成功”
输出:
html_文档:flexdashboard::flex_dashboard
pdf_文档:默认值
---
---
```{r设置,include=FALSE}
knitr::opts_chunk$set(echo=FALSE)
图书馆(dplyr)
图书馆(绘本)
```
```{r comp,echo=FALSE,message=FALSE,warning=FALSE}
df%
添加跟踪(y=~基线)
```
按照我的结构,.Rmd中的一个变量定义了为其进行计算的人,我处理文件名的唯一方法是在编织之前用该人的名字手动保存一个文件

我对如何实现这一目标的猜测是:

  • 生成带有每个附加人员姓名的.Rmd文件(即PerfReport_a.Rmd、PerfReport_b.Rmd),并更改每个文件中的testperson变量
  • 运行一个脚本,将这些.Rmd文件编织成一组html文件
  • 如果我对这里的一般步骤的理解是正确的,那么第2步将包含一个.R文件,该文件将编织目录中的每个.Rmd文件

    files<-list.files("E:/Dashboards/",pattern = "[.]Rmd$")
    
    files2<-as.data.frame(files)
    files3<-files2%>%
      mutate(filenow=paste0("E:/Dashboards/",files))
    
    files4<-files3$filenow
    
    for (f in files4) rmarkdown::render(f)
    

    files您可以使用yaml参数
    params
    来正确执行此操作。你需要

    • 一个模板(template.Rmd)
    • 运行模板的脚本(script.R)
    下面是一个很小的例子:

    模板Rmd script.R
    库(rmarkdown)
    
    人员这是优秀的,并按预期工作!如果我想传递一个不同的变量,比如“昵称”到文件名,这是一个简单的调整吗?是的,只需在yaml头中的
    params:
    中添加另一个值即可。请看这里:
    ---
    title: no title
    author: Roman
    date: "`r Sys.Date()`"
    params:
      testperson: NA
    ---
    
    ```{r}
    print(params$testperson)
    ```
    
    ```{r}
    sessionInfo()
    ```
    
    library(rmarkdown)
    
    persons <- c("person1", "person2", "person3")
    
    for (person in persons) {
      rmarkdown::render(input = "template.Rmd",
                        output_file = sprintf("%s_report.html", person),
                        params = list(testperson = person)
                        )
    }