RMarkdown - 有条件的标题(table 之前的文本标题)
RMarkdown - having the title (text heading before a table) be conditional
我有一个参数化的 R Markdown。基本上,我通过“case_id”字段过滤数据帧并输出这些过滤结果的 table。我在一个循环中呈现 RMarkdown 文档,循环遍历每个唯一 case_id。对于数组中的每个 case_id,我检查数据帧,如果它存在,我输出一个过滤的 table 显示 case_id 的结果。此处的工作示例:
RMarkdown:
---
title: "My Title"
output:
html_document:
params:
case: case
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## My Table
```{r warning = FALSE, echo = FALSE, fig.height=10, fig.width=6}
data <- read.csv(text="case_id,event,group,start,end,color,line.color
3,event_1,Project,2020-06-15,2020-10-15,#ffffff,#FF0000
3,event_1,Meetings,2020-07-30,2020-07-30,#ffffff,#0000ff
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
9,event_1,Meetings,2017-01-15,2017-01-15,#ffffff,#FF0000")
data$case_id <- as.numeric(data$case_id)
if(any(params$case==data$case_id)) {
#Filter PDMP by the selected case
data.filtered <- data %>%
filter(params$case==case_id)
data.filtered <- data.filtered %>%
filter(!is.na(start)&!is.na(end))
pdmp_numRows <- nrow(data.filtered)
if (pdmp_numRows>0) {
#Print table of prescriptions
data.filtered %>%
arrange(start)%>%
kable() %>% kable_styling(bootstrap_options = "striped","condensed", font_size = 12)
}
}
```
这是呈现它的 R 脚本:
library(dplyr)
library(knitr)
library(rmarkdown)
#--------------------- Render RMarkdown Document ---------------------
case_array <- c(1:10)
render_data <- function(case) {
# assuming the output format of input.Rmd is PDF
rmarkdown::render(
"C:/Temp/test_kable.Rmd",
output_file = paste0('//my_directory/', 'test_cable_ex_',case, '.html'),
params = list(case=case),
envir = parent.frame()
)
}
for (case in case_array) {
render_data(case)
}
table按预期输出。问题是,当没有 table 时(当过滤数据帧的行 = 0 时),我不希望 table 标题“My Table”出现。我只想在 table 存在时显示“我的 Table”。
这就是我想要的:
这是我不想要的:
首先将您的 csv 加载到 data.frame,然后将标题放入一个块中,只有当存在具有所提供 ID 的案例时才会对其进行评估:
---
title: "My Title"
output:
html_document:
params:
case: case
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
data <- read.csv(text="case_id,event,group,start,end,color,line.color
3,event_1,Project,2020-06-15,2020-10-15,#ffffff,#FF0000
3,event_1,Meetings,2020-07-30,2020-07-30,#ffffff,#0000ff
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
9,event_1,Meetings,2017-01-15,2017-01-15,#ffffff,#FF0000")
data$case_id <- as.numeric(data$case_id)
```
```{r, eval=any(params$case==data$case_id), results='asis'}
print("## My Table")
```
您可以通过将 table 标题包装在适当的 if 语句中来做到这一点。
---
title: "My Title"
output:
html_document:
params:
case: case
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r warning = FALSE, echo = FALSE, fig.height=10, fig.width=6}
data <- read.csv(text="case_id,event,group,start,end,color,line.color
3,event_1,Project,2020-06-15,2020-10-15,#ffffff,#FF0000
3,event_1,Meetings,2020-07-30,2020-07-30,#ffffff,#0000ff
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
9,event_1,Meetings,2017-01-15,2017-01-15,#ffffff,#FF0000")
data$case_id <- as.numeric(data$case_id)
param_check <- any(params$case==data$case_id)
if (param_check) {
#Filter PDMP by the selected case
data.filtered <- data %>%
filter(params$case==case_id)
data.filtered <- data.filtered %>%
filter(!is.na(start)&!is.na(end))
pdmp_numRows <- nrow(data.filtered)
}
```
`r if (param_check) { if (pdmp_numRows > 0) {"# My Table"} }`
```{r warning = FALSE, echo = FALSE, fig.height=10, fig.width=6}
if(param_check) {
if (pdmp_numRows>0) {
#Print table of prescriptions
data.filtered %>%
arrange(start)%>%
kable() %>% kable_styling(bootstrap_options = "striped","condensed", font_size = 12)
}
}
```
我有一个参数化的 R Markdown。基本上,我通过“case_id”字段过滤数据帧并输出这些过滤结果的 table。我在一个循环中呈现 RMarkdown 文档,循环遍历每个唯一 case_id。对于数组中的每个 case_id,我检查数据帧,如果它存在,我输出一个过滤的 table 显示 case_id 的结果。此处的工作示例:
RMarkdown:
---
title: "My Title"
output:
html_document:
params:
case: case
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## My Table
```{r warning = FALSE, echo = FALSE, fig.height=10, fig.width=6}
data <- read.csv(text="case_id,event,group,start,end,color,line.color
3,event_1,Project,2020-06-15,2020-10-15,#ffffff,#FF0000
3,event_1,Meetings,2020-07-30,2020-07-30,#ffffff,#0000ff
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
9,event_1,Meetings,2017-01-15,2017-01-15,#ffffff,#FF0000")
data$case_id <- as.numeric(data$case_id)
if(any(params$case==data$case_id)) {
#Filter PDMP by the selected case
data.filtered <- data %>%
filter(params$case==case_id)
data.filtered <- data.filtered %>%
filter(!is.na(start)&!is.na(end))
pdmp_numRows <- nrow(data.filtered)
if (pdmp_numRows>0) {
#Print table of prescriptions
data.filtered %>%
arrange(start)%>%
kable() %>% kable_styling(bootstrap_options = "striped","condensed", font_size = 12)
}
}
```
这是呈现它的 R 脚本:
library(dplyr)
library(knitr)
library(rmarkdown)
#--------------------- Render RMarkdown Document ---------------------
case_array <- c(1:10)
render_data <- function(case) {
# assuming the output format of input.Rmd is PDF
rmarkdown::render(
"C:/Temp/test_kable.Rmd",
output_file = paste0('//my_directory/', 'test_cable_ex_',case, '.html'),
params = list(case=case),
envir = parent.frame()
)
}
for (case in case_array) {
render_data(case)
}
table按预期输出。问题是,当没有 table 时(当过滤数据帧的行 = 0 时),我不希望 table 标题“My Table”出现。我只想在 table 存在时显示“我的 Table”。
这就是我想要的:
这是我不想要的:
首先将您的 csv 加载到 data.frame,然后将标题放入一个块中,只有当存在具有所提供 ID 的案例时才会对其进行评估:
---
title: "My Title"
output:
html_document:
params:
case: case
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
data <- read.csv(text="case_id,event,group,start,end,color,line.color
3,event_1,Project,2020-06-15,2020-10-15,#ffffff,#FF0000
3,event_1,Meetings,2020-07-30,2020-07-30,#ffffff,#0000ff
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
9,event_1,Meetings,2017-01-15,2017-01-15,#ffffff,#FF0000")
data$case_id <- as.numeric(data$case_id)
```
```{r, eval=any(params$case==data$case_id), results='asis'}
print("## My Table")
```
您可以通过将 table 标题包装在适当的 if 语句中来做到这一点。
---
title: "My Title"
output:
html_document:
params:
case: case
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r warning = FALSE, echo = FALSE, fig.height=10, fig.width=6}
data <- read.csv(text="case_id,event,group,start,end,color,line.color
3,event_1,Project,2020-06-15,2020-10-15,#ffffff,#FF0000
3,event_1,Meetings,2020-07-30,2020-07-30,#ffffff,#0000ff
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
5,event_1,Meetings,2020-08-30,2020-08-30,#ffffff,#FF0000
9,event_1,Meetings,2017-01-15,2017-01-15,#ffffff,#FF0000")
data$case_id <- as.numeric(data$case_id)
param_check <- any(params$case==data$case_id)
if (param_check) {
#Filter PDMP by the selected case
data.filtered <- data %>%
filter(params$case==case_id)
data.filtered <- data.filtered %>%
filter(!is.na(start)&!is.na(end))
pdmp_numRows <- nrow(data.filtered)
}
```
`r if (param_check) { if (pdmp_numRows > 0) {"# My Table"} }`
```{r warning = FALSE, echo = FALSE, fig.height=10, fig.width=6}
if(param_check) {
if (pdmp_numRows>0) {
#Print table of prescriptions
data.filtered %>%
arrange(start)%>%
kable() %>% kable_styling(bootstrap_options = "striped","condensed", font_size = 12)
}
}
```