如何从生成的 HTML 文档的 ToC 中排除未评估的 R 标记部分?
How to exclude the not evaluated R markup sections from the ToC of the resulting HTML document?
我正在编写 R/Shiny 代码,使用 R 标记模板为我的用户数据生成 HTML 报告。我想为用户提供从报告中省略某些部分的选项。这对于章节本身来说很容易做到,但对于章节的标题和目录条目来说并不明显。任何建议将不胜感激!
我的代码通过 rmarkdown::render 函数的 params 变量传递要包含在报告中的部分列表。并且 R 标记文件中省略的部分确实没有被评估。但是,这些(空的)部分的 ToC 条目和标题最终仍会出现在生成的 HTML 文件中。我浏览了手册,但找不到任何方法来使用标记代码参数来排除标记文件的所需部分。
---
output:
html_document:
theme: yeti
df_print: kable
toc: true
toc_float:
collapsed: true
smooth_scroll: false
params:
ExpData: data.frame()
set_title: "My Data Report"
Sections_to_include: list()
title: "`r params$set_title`"
---
.....................................
.....................................
.....................................
# ANOVA
```{r , eval = ( "ANOVA" %in% params$Sections_to_include)}
# Here be the code that generates my ANOVA table
# lme_model is calculated from params$ExpData in the preceding
# code chunks
kable(ANOVA(lme_model))
```
如果 params$Sections_to_include 列表不包含元素 "ANOVA" 那么上面的代码块不会进行评估,也不会打印方差分析 table。但是,章节标题 ANOVA 仍将包含在空章节之前的 HTML 文档中,并且 ToC 将包含该标题的 link。这当然是
# ANOVA
行指示 R 标记执行的操作。我想知道是否有任何参数可以让我指示 R 标记渲染器忽略该行。
我能看到的一个解决方案是将工作流程更改为 (i) 根据所需选项(例如,使用 UNIX 命令行工具)从基本模板生成自定义 R 标记文档,以及 (ii) 然后呈现将自定义标记文件转换为 HTML 文档。但我想知道 R 标记/knitr 是否提供更简单的 built-in 解决方案?
谢谢大家!
您可以使用 "asis"
引擎来完成。编写一个小函数来决定是否应包含某些内容可能会有所帮助。这是您的示例,已修改为省略 "ANOVA",但包括另外两个部分。
---
output:
html_document:
theme: yeti
df_print: kable
toc: true
toc_float:
collapsed: true
smooth_scroll: false
params:
ExpData: data.frame()
set_title: "My Data Report"
Sections_to_include: ["Other", "More"]
title: "`r params$set_title`"
---
.....................................
.....................................
.....................................
```{r include=FALSE}
library(knitr)
include <- function(section) {
section %in% params$Sections_to_include
}
```
```{asis , echo=include("Other")}
# Other section
This is a section that I do want to include, this time.
```
```{asis echo=include("ANOVA")}
# ANOVA
```
```{r , echo = include("ANOVA"), eval = include("ANOVA")}
# Here be the code that generates my ANOVA table
# lme_model is calculated from params$ExpData in the preceding
# code chunks
kable(ANOVA(lme_model))
```
```{asis , echo=include("More")}
# More
So is this one.
```
我不确定如何从 YAML 中以编程方式生成 Sections_to_include
中部分名称的向量,但您始终可以在对 rmarkdown::render
.[=14= 的调用中传递参数值]
我正在编写 R/Shiny 代码,使用 R 标记模板为我的用户数据生成 HTML 报告。我想为用户提供从报告中省略某些部分的选项。这对于章节本身来说很容易做到,但对于章节的标题和目录条目来说并不明显。任何建议将不胜感激!
我的代码通过 rmarkdown::render 函数的 params 变量传递要包含在报告中的部分列表。并且 R 标记文件中省略的部分确实没有被评估。但是,这些(空的)部分的 ToC 条目和标题最终仍会出现在生成的 HTML 文件中。我浏览了手册,但找不到任何方法来使用标记代码参数来排除标记文件的所需部分。
---
output:
html_document:
theme: yeti
df_print: kable
toc: true
toc_float:
collapsed: true
smooth_scroll: false
params:
ExpData: data.frame()
set_title: "My Data Report"
Sections_to_include: list()
title: "`r params$set_title`"
---
.....................................
.....................................
.....................................
# ANOVA
```{r , eval = ( "ANOVA" %in% params$Sections_to_include)}
# Here be the code that generates my ANOVA table
# lme_model is calculated from params$ExpData in the preceding
# code chunks
kable(ANOVA(lme_model))
```
如果 params$Sections_to_include 列表不包含元素 "ANOVA" 那么上面的代码块不会进行评估,也不会打印方差分析 table。但是,章节标题 ANOVA 仍将包含在空章节之前的 HTML 文档中,并且 ToC 将包含该标题的 link。这当然是
# ANOVA
行指示 R 标记执行的操作。我想知道是否有任何参数可以让我指示 R 标记渲染器忽略该行。
我能看到的一个解决方案是将工作流程更改为 (i) 根据所需选项(例如,使用 UNIX 命令行工具)从基本模板生成自定义 R 标记文档,以及 (ii) 然后呈现将自定义标记文件转换为 HTML 文档。但我想知道 R 标记/knitr 是否提供更简单的 built-in 解决方案?
谢谢大家!
您可以使用 "asis"
引擎来完成。编写一个小函数来决定是否应包含某些内容可能会有所帮助。这是您的示例,已修改为省略 "ANOVA",但包括另外两个部分。
---
output:
html_document:
theme: yeti
df_print: kable
toc: true
toc_float:
collapsed: true
smooth_scroll: false
params:
ExpData: data.frame()
set_title: "My Data Report"
Sections_to_include: ["Other", "More"]
title: "`r params$set_title`"
---
.....................................
.....................................
.....................................
```{r include=FALSE}
library(knitr)
include <- function(section) {
section %in% params$Sections_to_include
}
```
```{asis , echo=include("Other")}
# Other section
This is a section that I do want to include, this time.
```
```{asis echo=include("ANOVA")}
# ANOVA
```
```{r , echo = include("ANOVA"), eval = include("ANOVA")}
# Here be the code that generates my ANOVA table
# lme_model is calculated from params$ExpData in the preceding
# code chunks
kable(ANOVA(lme_model))
```
```{asis , echo=include("More")}
# More
So is this one.
```
我不确定如何从 YAML 中以编程方式生成 Sections_to_include
中部分名称的向量,但您始终可以在对 rmarkdown::render
.[=14= 的调用中传递参数值]