基于子文档与变量列表生成Rmarkdown报告时变量传递报错求助
问题解决方法
1. 修正子文件 anova.Rmd 的格式与变量引用
原文件存在格式错误(外层多余反引号)和非标准评估的潜在问题,修正后代码如下:
--- title: "Anova analysis on iris data." output: html_document: df_print: paged params: var_name: "Sepal.Length" --- Anova to quantify effect of species on iris data. ## Load libraries ```{r} library(dplyr) library(ggplot2) library(rstatix)
Read in iris data
data(iris)
Boxplot
ggplot(iris, aes(x = Species, y = .data[[params$var_name]], fill = Species)) + geom_boxplot() + theme_minimal()
Anova
anova_result <- iris %>% anova_test(formula = as.formula(paste(params$var_name, "~ Species"))) print(anova_result)
> 注:改用`.data[[params$var_name]]`和动态生成公式的方式,避免非标准评估的兼容性问题,比原`!!`引用更稳定。 ### 2. 修正主文件的参数传递与文件名错误 原主文件存在参数传递方式错误和子文件名拼写错误,修正后代码如下: ```yaml --- title: "Full analysis" output: html_document: toc: true toc_float: true --- ## Load libraries ```{r setup, include=FALSE} library(knitr)
var_names <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width") results <- lapply(var_names, function(var_name) { cat("# ", var_name, "\n\n") knit_child("anova.Rmd", envir = environment(), params = list(var_name = var_name) # 通过params列表传递参数 ) }) cat(unlist(results), sep = '\n')
### 错误核心原因 - `knit_child`不支持直接传入自定义参数(如`var_name=var_name`),必须通过`params`参数以列表形式传递,对应子文件YAML中定义的参数项。 - 子文件外层的反引号会导致整个文档被识别为代码块,而非Rmarkdown结构,必须移除。 - 主文件中子文件名拼写错误(`anova_db.Rmd`应为`anova.Rmd`),导致无法找到子文档。 内容的提问来源于stack exchange,提问作者Ensa
相关产品推荐
相关产品推荐

