R - Как генерировать параметризованные отчеты с помощью вложенных ссылок + pwalk (rmarkdown :: render) - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать оценочные отчеты на основе данных студентов.Моя идея состояла в том, чтобы создать RDS (вложенный тиббл) для передачи в rmarkdown::render() с использованием purrr::pwalk().Я относительно новичок в мурлыкании и его map семействе функций.

Вот часть кода, которая работает (попробуйте):

library(tidyverse)

# assignment tibble
assignments <- tribble(
~ FullName, ~Assignment, ~Type, ~Score, ~Due,
"Friendly, Officer", "First Assignment", "Assignment", 4, "2018-11-01",
"Friendly, Officer", "Second Assignment", "Assignment", 2, "2018-11-03",
"OLantern, Jack", "First Assignment", "Assignment", 3, "2018-11-01",
"OLantern, Jack", "Second Assignment", "Assignment", 3, "2018-11-03"
)

# personal data RDS
personal <- tribble(
~ FullName, ~ID, ~Phone, ~DOB,
"Friendly, Officer", 366529, "999-999-9990", "2000-03-04",
"OLantern, Jack", 586121, "999-999-9991", "2001-04-05"
) %>%
group_by(FullName) %>%
nest(.key = "personal")

# create an rds
myrds <- assignments %>%
group_by(FullName) %>%
nest(.key = "assignments")

# join assignment and personal data
myrds <- myrds %>%
inner_join(personal)

... который генерирует myrds, который выглядит следующим образом:

> myrds
# A tibble: 2 x 3
  FullName          assignments      personal        
  <chr>             <list>           <list>          
1 Friendly, Officer <tibble [2 x 4]> <tibble [1 x 3]>
2 O'Lantern, Jack   <tibble [2 x 4]> <tibble [1 x 3]>

Теперь я пытаюсь сгенерировать объект «отчет», а затем передать его rmarkdown::render и purrr::pwalk на основе этой части кода Хэдли Уикхема в следующем видео:

https://www.youtube.com/watch?v=K-ss_ag2k9E&t=2339s

Мой желаемый вывод - это разные PDF-файлы для каждого учащегося, причем в отчете содержатся личные данные учащегося и данные о его назначении.Спасибо за вашу помощь!

Обновление

После комментария Камиллы и сбора фрагментов из видео, которое я упомянул, я пришел к следующему.По какой-то причине tibble() жалуется на длину name и filename ... но эта часть работает для моей исходной базы данных, как ни странно (это отдельная проблема).Вот моя попытка:

loc <- dirname("~//")

reports <- tibble(
  name = unique(myrds$FullName),
  filename = paste0(dirname(loc),
                    "\\/",
                    stringr::str_extract(name, "\\w+"), 
                    "_", 
                    lubridate::ymd(Sys.Date()),
                    ".pdf"),
  params = map(myrds, ~ list(my_report = .))
)

Теперь для генерации документов:

reports %>%
  select(output_file = filename, params) %>%
  pwalk(rmarkdown::render, input = "myReport.Rmd")

Это дает мне ошибку:

Error in knit_params_get(input_lines, params) : 
  render params not declared in YAML: my_report

Это часть params, котораяУ меня проблемы с.YAML жалуется на параметры, которые я отправляю (я не удивлен).В исходном коде (см. Ссылку на видео выше) параметры просты.Как мне отформатировать строку params = map(myrds, ~ list(my_report = .)) выше, чтобы я мог передать rmarkdown::render данные об ученике?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...