使用purrr生成RMarkdown标题和代码块时代码未执行问题
问题原因
R Markdown的渲染流程有两个固定的先后阶段,执行逻辑不可逆:
- 第一阶段由
knitr优先处理文档中所有原生写死的R代码块,按照配置执行代码、生成对应输出,这个阶段结束后所有原生代码块都会被替换为处理后的结果(文本、图片、表格等) - 第二阶段才会把第一阶段输出的完整Markdown内容交给
pandoc,转换为最终的HTML/Word/PDF等格式
你用results = "asis"动态输出的```r代码块,是在第一阶段knitr处理完所有原生代码块之后才生成的,这时候knitr已经不会再对新生成的内容做代码块解析执行了,只会把这部分内容当成普通的Markdown格式代码块传递给pandoc,最终就只会展示代码文本,不会执行里面的print('test')逻辑。
解决方法
如果要实现动态生成可执行的代码块,可以用knitr::knit_expand模板渲染的方式实现,示例写法如下:
--- title: "Untitled" date: "10/9/2021" output: html_document --- ```{r setup, include=FALSE} knitr::opts_chunk$set(echo = FALSE) vars <- c("1", "2", "3")
r paste(knitr::knit_expand(text = c( '### {{var}}` {-}
print("test")
'), var = vars), collapse = '\n')`
这种方式是在knitr处理内联R代码的阶段就完成了模板渲染和代码块生成,会被knitr识别为可执行的代码块正常处理。 内容的提问来源于stack exchange,提问作者Dylan Russell
相关产品推荐
相关产品推荐

