基于Tibble逐行渲染参数化R Markdown文档报错求助
参数化R Markdown批量渲染报错排查与修复
运行代码时触发如下错误:
Error in `pmap()`: ℹ In index: 1.
无法正常读取传入的参数,以下是测试代码:
测试文件:ReportGenTest.R
# Report Gen Test library(tidyverse) library(rlang) df.data <- tribble( ~EmplId, ~Name, ~Gender, "146193", "Tony","M", "146194", "Bob","M", "146195", "Sarah","F" ) df.report <- df.data |> mutate(output_file = stringr::str_c('Report_', EmplId, '_', Name, '.pdf'), params = map(EmplId, ~list(my_emplid = .))) %>% select (output_file, params) df.report %>% # select(output_file, params) %>% purrr::pwalk(rmarkdown::render, input = "ReportGenTest.Rmd")
测试文件:ReportGenTest.Rmd
--- title: "ReportGenTest" author: "Tony Jones" date: "`r Sys.Date()`" output: html_document params: my_emplid: "146193" --- ```{r setup, include=FALSE} # library(tidyverse) knitr::opts_chunk$set(echo = TRUE) # # e % # filter(EmplId == params$my_emplid)
Hi
r params$my_emplid ### 问题原因与修复 1. **输出格式冲突**:Rmd文件指定输出为`html_document`,但R脚本中`output_file`用了`.pdf`后缀,格式不匹配导致渲染失败。 2. **可选优化**:参数映射时用`.x`替代`.`,代码可读性更强。 #### 方案1:生成HTML报告(修改R脚本) 调整`output_file`的后缀为`.html`,同时明确`pwalk`的参数传递逻辑: ```r # Report Gen Test library(tidyverse) library(rlang) df.data <- tribble( ~EmplId, ~Name, ~Gender, "146193", "Tony","M", "146194", "Bob","M", "146195", "Sarah","F" ) df.report <- df.data |> mutate( output_file = stringr::str_c('Report_', EmplId, '_', Name, '.html'), params = map(EmplId, ~list(my_emplid = .x)) ) %>% select(output_file, params) df.report %>% purrr::pwalk(function(output_file, params) { rmarkdown::render( input = "ReportGenTest.Rmd", output_file = output_file, params = params ) })
方案2:生成PDF报告(修改Rmd)
如果需要PDF输出,修改Rmd的YAML配置为pdf_document,同时确保环境已安装LaTeX(如TinyTeX):
--- title: "ReportGenTest" author: "Tony Jones" date: "`r Sys.Date()`" output: pdf_document params: my_emplid: "146193" ---
修改后即可正常批量生成参数化报告,每个报告都会正确显示传入的my_emplid值。
内容的提问来源于stack exchange,提问作者voam
相关产品推荐
相关产品推荐

