Rmarkdown 在循环内渲染 - 为什么我的参数没有被传递?

问题描述 投票:0回答:1

我正在尝试通过 Rmarkdown 编译多个文档。

我正在使用“params”参数,并且我在 Rmarkdown 文档的 yaml 标头中声明这些参数。但我仍然收到错误

Error in knit_params_get(input_lines, params) : 
render params not declared in YAML: student_no

下面是我用来执行此操作的代码(R)


library(rmarkdown)
library(tidyverse)

setwd("/path/to/directory")

df = read_csv("2324_data_for_student_reports.csv")

ids = unique(df$CandidateId)

for (i in 1:length(ids)){
  rmarkdown::render(
    input = "2324 student reports - generate graphs.Rmd",
    params = list(student_no=ids[i]),
    output_format = "word_document",
    output_file = paste0(as.character(ids[i]), ".docx")
  )
  
}

这里是渲染图表的 Rmarkdown 代码


    ---
    title: "Student report"
    params:
      student_no:
    ---
    
    
    
    ```{r setup}
    setwd("/path/do/directory")
    library(tidyverse)
    library(psych)
    theme_set(theme_bw())
    ```
    
    
    ```{r}
    
    df <- read_csv("2324_data_for_student_reports.csv")
    
    
    ```
    
    # Report for Student Number `r params$student_no`
    
    ```{r}
    
    
    df.means = df %>% group_by(topic) %>% summarise(score = mean(score))
    df.id = df %>% filter(CandidateId == params$student_no) %>% group_by(topic) %>% summarise(score = mean(score))
    
    g = ggplot(data = df.means,
               aes(x = topic, y = score))
    g = g + geom_bar(stat = "identity", fill = "grey70")
    g = g + scale_x_discrete(guide = guide_axis(angle = 50))
    g = g + ylim(0, 1)
    g = g + geom_point(data = df.id, aes(x = topic, y = score),
                       shape = 15,
                       size = 3)
    g

r r-markdown knitr render
1个回答
0
投票

声明参数时需要为参数提供默认值。请参阅https://bookdown.org/yihui/rmarkdown/params-declare.html

尝试将您的 Rmd 标头更新为

---
title: "Student report"
params:
  student_no: 1
---
© www.soinside.com 2019 - 2024. All rights reserved.