Я пытаюсь создать оценочные отчеты на основе данных студентов.Моя идея состояла в том, чтобы создать 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
данные об ученике?