knitr :: knit не выполняет итерации по списку, завершается неудачно с первого чанка - PullRequest
1 голос
/ 07 марта 2020

Надеюсь, кто-нибудь сможет мне помочь. На работе у меня есть документ RMarkdown, который задуман как пустой шаблон для заполнения. Во втором R-скрипте у меня есть набор кода, который берет некоторые данные, выполняет некоторую обработку, затем для каждой группы заполняет документ уценки, сохраняет pdf, а затем повторяет для следующей группы. Когда я впервые написал его два года go, он работал совершенно нормально, но теперь он не работает на первой итерации в первом блоке R и выдает «неожиданную ошибку ввода». Неважно, что такое блок R, он ошибается в первом блоке. Когда я открываю документ Markdown и вручную заменяю все и нажимаю «вязать», он работает нормально.

Я думаю, что я получил его до минимально воспроизводимого примера. Внутри проекта у меня есть файл уценки с именем "TestingForm.Rmd", который выглядит примерно так ...

---
title: "Illustrating Problem"
author: "Spudtopia"
date: "3/6/2020"
output: pdf_document
---

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

This is a test for '&courseTitle'

```{r cars}
print("I'm testing to see if it correctly replaces &courseTitle")
```

## Heading

That's all. That's the test.

Тогда в сценарии R у меня есть что-то вроде ...

library(tidyverse)
library(knitr)
library(readr)
library(purrr)
library(stringr)

things <- c('Thing One','Thing Two','Thing Three')

output_PDFs <- function(various_files) {

  gned_template <- read_file('TestingForm.Rmd')

  gned_template <- str_replace_all(gned_template, c('&courseTitle' = various_files))

  md_filename <- paste0(various_files, "-Test.pdf")

  knitr::knit(text = gned_template, output = md_filename)

}

map(things, ~output_PDFs(.x))

Вы можете переставить блоки R, первый блок R всегда выдает ошибку «неожиданный ввод». Я обновил R, обновил RStudio и обновил все свои пакеты. Что я написал неправильно?

1 Ответ

1 голос
/ 08 марта 2020

Замените knitr::knit на rmarkdown::render и все работает нормально. Я добавил комментарии, где я изменил ваш код. Попробуйте это:

library(tidyverse)
library(rmarkdown)
library(readr)
library(purrr)
library(stringr)

things <- c('Thing One','Thing Two','Thing Three')

output_PDFs <- function(various_files) {

  gned_template <- read_file('TestingForm.Rmd')

  gned_template <- str_replace_all(gned_template, '&courseTitle', various_files)

  # Temporary file
  write_file(gned_template, 'TestingForm_tmp.Rmd')

  md_filename <- paste0(various_files, "-Test.pdf")
  # Use rmarkdown::render
  rmarkdown::render(input = 'TestingForm_tmp.Rmd', output_file = md_filename)

}

map(things, ~output_PDFs(.x))
...