0

大家早上好,

如上所述,我正在尝试为每个报告呈现具有不同参数的多个 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()
    
    ```

谢谢你的帮助。

4

0 回答 0