knitr :: knit未遍历列表,在第一块失败

时间:2020-03-07 19:21:10

标签: r dplyr r-markdown knitr

希望有人可以帮助我。在工作中,我有一个RMarkdown文档,该文档旨在作为要填充的空白模板。在第二个R脚本中,我有一堆代码,其中包含一些数据,进行一些处理,然后为每个组填充降价文档,保存pdf,然后为下一组重复。两年前我第一次写它时,它运行得很好,但是现在它在第一个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 个答案:

答案 0 :(得分:1)

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