我正在使用 R Markdown 批量生成参数化 pdf 报告。我运行每个代码块都没有问题,编织单个 pdf 也没有问题。但是当我在底部运行 lapply() 函数时,成功生成了三个(钻石数据集中的“cut”变量有四个类别)pdf,但不是第四个。我收到错误消息:
我已经重新安装了 R、RStudio 以及我的代码中使用的每个包。 我已经确定这个问题与 ggplot 代码块有关 - 因此,如果我排除该代码块,所有四个 pdf 都会成功生成。
以下是我的 .Rmd 文件中的所有内容。
---
output:
tufte::tufte_handout:
latex_engine: xelatex
header-includes:
- \usepackage{booktabs}
- \usepackage{fontspec}
- \usepackage{graphicx}
- \usepackage{amsmath}
- \setmainfont{Times New Roman}
- \newcommand{\bcenter}{\begin{center}}
- \newcommand{\ecenter}{\end{center}}
params:
cut: "Very Good"
---
\fontsize{10}{12}
\selectfont
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE,
warning = FALSE,
message = FALSE,
fig.align = 'center',
include = TRUE,
tinytex.tlmgr_update = FALSE,
results='asis',
fig.dim = c(7, 2.5))
pacman::p_load(tidyverse)
```
## I'm using "diamonds" dataset and cut is my parameter
```{r}
filter(diamonds, cut == params$cut) %>%
ggplot(aes(color, price)) +
geom_boxplot()
```
```{r}
kableExtra::kable(head(filter(diamonds, cut == params$cut)))
```
运行此代码以生成多个输出文件:
library(tidyverse)
lapply(unique(diamonds$cut), function(i) {
rmarkdown::render(input = "testing_for_stackoverflow.Rmd",
params = list(cut = i),
rmarkdown::pdf_document(),
output_dir = "out/",
output_file = paste0(i, ".pdf"))
})
渲染(或者更确切地说未渲染)的第四个文档是在假定的中间文件名和最终文件名中包含空格的文档:
Very Good...
。从错误消息猜测,文件名可能会被错误地解释为两个单独的指令 (undefined control sequence
)。
更换空白可以解决问题吗?一种方法:
lapply(make.names(unique(diamonds$cut)), ...)
而不是:
lapply(unique(diamonds$cut), ...)