大家早上好,
如上所述,我正在尝试为每个报告呈现具有不同参数的多个 Rmarkdown 报告。基本上我有一个 .csv 文件的文件夹,我必须清理它。我已将所有步骤打包在一个 .Rmd 文件中,因为这样可以清理数据并生成一份简短的报告来记录结果。一些数字,一些统计数据,没有什么戏剧性的,只是对清洁过程的概述。
由于每个 .csv 文件略有不同,我必须调整一些参数。这是简单的部分。我在“R for Data Science”一书中找到了一些不错的代码,你可以在这里找到。https://r4ds.had.co.nz/r-markdown.html#parameters
这是我的版本:
library(dplyr)
library(stringr)
library(purrr)
# Create a vector with names
files <- c("dataframe", "datatable")
# Create a tibble with filenames and lists of parameters
reports <- tibble(
filename = str_c(files, ".html"),
params = map(files, ~ list(name = .,
factor = if_else(. == "dataframe", 2.5, 5))))
#-------------------------------------------------------------------
# make reports
reports <- reports %>%
select(output_file = filename, params) %>%
purrr::pwalk(rmarkdown::render, input = "template_datatable.Rmd")
当 .Rmd 文件使用 data.frames 时,一切运行良好。由于我的 .csv 每个大约 1 GB,我会使用 data.table 来加快速度。但是,一旦我的 .Rmd 文件包含一些 data.table 代码,我就会收到以下错误消息:
Error: `:=` can only be used within a quasiquoted argument
如果我只用 .Rmd 渲染一个文件rmarkdown::render(input = "template_datatable.Rmd", output_file = "test.html", params = list(name = "datatable", carat = 5))
,那么带有 data.table 代码的 .Rmd 就可以正常工作。
我的问题是。是什么导致了这个错误?有没有办法解决它?
这是我使用 data.frames 的 .Rmd 代码:
---
title: "A report for `r params$name`"
params:
name: "name"
factor: 1
output:
bookdown::html_document2:
fig_caption: yes
toc: yes
toc_float: true
code_folding: "hide"
---
```{r setup, include=FALSE}
# Setup Chunk
# Some knitr options
knitr::opts_chunk$set(echo = FALSE)
# Packages
library(dplyr)
library(ggplot2)
```
```{r dataImport}
df <- data.frame(A = seq(1, 100), B = seq(1, 100))
df <- df %>%
mutate(C = B * params$factor)
```
```{r makePlot}
ggplot(df, aes(A, C)) +
geom_line()
```
我使用 data.tables 的 .Rmd 代码:
```
---
title: "A report for `r params$name`"
params:
name: "name"
factor: 1
output:
bookdown::html_document2:
fig_caption: yes
toc: yes
toc_float: true
code_folding: "hide"
---
```{r setup, include=FALSE}
# Setup Chunk
# Some knitr options
knitr::opts_chunk$set(echo = FALSE)
# Packages
library(data.table)
library(ggplot2)
```
```{r dataImport}
dt <- data.table(A = seq(1, 100), B = seq(1, 100))
dt <- dt[, C := B*params$factor]
```
```{r makePlot}
ggplot(dt, aes(A, C)) +
geom_line()
```
谢谢你的帮助。