【问题标题】:RMarkdown - having the title (text heading before a table) be conditionalRMarkdown - 有条件的标题(表格前的文本标题)
【发布时间】:2020-12-10 16:47:55
【问题描述】:

我有一个参数化的 R Markdown。基本上,我通过“case_id”字段过滤数据框并输出这些过滤结果的表格。我在循环中呈现 RMarkdown 文档,循环遍历每个唯一的 case_id。对于数组中的每个 case_id,我检查数据框,如果存在,我会输出一个过滤表,显示该 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)
}

表格按预期输出。问题是,当没有表时(当过滤数据框的行 = 0 时),我不希望表标题“我的表”出现。我只想在表格存在时显示“我的表格”。

这就是我想要的:

这是我不想要的:

提前致谢!

【问题讨论】:

    标签: html r r-markdown kable


    【解决方案1】:

    您可以通过将表格标题包含在适当的 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 脚本呈现 rmarkdown?您的代码输出:--- title: "My Title" output: html_document: params: case: case ---
    • 哦,等等,可能已经开始工作了 - 让我看看这里。
    【解决方案2】:

    首先将您的 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")
    ```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-06
      • 2013-08-18
      • 1970-01-01
      • 2012-12-09
      • 2015-12-21
      • 2018-03-12
      • 2018-11-18
      • 1970-01-01
      相关资源
      最近更新 更多