Как создать и связать персонализированные версии отчета .Rmd? - PullRequest
3 голосов
/ 08 февраля 2020

Я создал отчет PerfReport.Rmd, в котором сравнивается производительность одного человека с эффективностью большой группы. У меня есть сотни людей, которые должны получить персонализированную версию этого отчета, сравнивая их собственную производительность с большой группой.

Препятствия, которые я вижу: 1. Мне нужно, чтобы каждое имя файла включало имя человека. 2. В каждом файле есть расчеты, которые задаются для человека c.

Вот пример .Rmd

---
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)

```

Как я структурировал, переменная в .Rmd определяет человека, для которого производятся расчеты, и единственный способ, которым я позабочусь о именах файлов, - это вручную сохранить файл с именем человека перед вязанием.

Я думаю, как это сделать sh to:

  1. Создание файлов .Rmd с добавлением имен каждого человека (т.е. PerfReport_a.Rmd, PerfReport_b.Rmd) и изменение переменной testperson в каждом файле.
  2. Запустите a скрипт, который объединяет каждый из этих файлов .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)

Любая помощь в создании файлов .Rmd со скорректированными значениями для testperson будет принята с благодарностью. Если есть просто лучший способ получить от одного главного мастера .Rmd до сотен персонализированных. html панелей, которые я собираюсь создать, я бы тоже хотел изучить этот метод!

Спасибо Вы заранее.

1 Ответ

1 голос
/ 08 февраля 2020

Вы можете использовать параметр yaml params, чтобы получить это право. Вам понадобится

  • один шаблон (template.Rmd)
  • скрипт для запуска шаблона (script.R)

Вот небольшой тривиальный пример :

template.Rmd

---
title: no title
author: Roman
date: "`r Sys.Date()`"
params:
  testperson: NA
---

```{r}
print(params$testperson)
```

```{r}
sessionInfo()
```

script.R

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)
                    )
}

Это должно заполнить вашу рабочую папку файлами personX_report.html (см. Скриншот ниже).

enter image description here

...