【问题标题】:How to add table caption using df_print?如何使用 df_print 添加表格标题?
【发布时间】:2018-01-23 21:09:50
【问题描述】:

在rmarkdown(我碰巧在使用blogdown)中,如果我们使用SQL 代码块,则会在knitr 代码块中添加带有tab.cap 的表格标题。有没有办法将tab.cap 用于在 YAML 中使用df_print = "kable" 打印小标题的 R 代码块。

我知道直接使用 kable 函数会起作用,但我希望使用 df_print

```{r}
datasets::mtcars %>%
  head(2) %>%
  knitr::kable(caption = "My caption")
```    

可重现的例子

---
title: Table Captions
output:
  blogdown::html_page:
    df_print: "kable"
---

```{r setup, include = FALSE}
library(tidyverse)
library(DBI)
db <- dbConnect(RSQLite::SQLite(), dbname = "sql.sqlite")
```

```{sql, connection=db, tab.cap = "My Caption"}
WITH twoCol(a, b) AS (SELECT 1, 2 UNION SELECT 2, 4) SELECT a, b FROM twoCol;
```

```{r print-table, tab.cap = "Sample of the users table"}
datasets::mtcars %>%
  head(2)
```

【问题讨论】:

    标签: r knitr r-markdown bookdown blogdown


    【解决方案1】:

    这不是一个答案,我只是想表达我自己的观点。

    df_print 用于打印数据帧,您的 SQL 代码块的输出是 SQL TABLE,而不是数据帧

    chunk选项tab.cap可能只针对SQL引擎,这意味着我们必须直接使用函数kable()数据框添加表格标题。

    PS:Section 1.5

    目前,并非rmarkdown::html_document 的所有功能都支持 blogdown,如df_printcode_foldingcode_download等。

    但是,我发现 blogdown 支持 df_print

    编辑:

    sql 表总是打印kable(),不管df_print是什么。我们可以通过tab.cap = NA禁用sql table标题。

    可以通过定义块挂钩来添加表格标题(例如table_caption)。在.rmd文件顶部插入以下代码sn -p(只是一个简单的例子):

    ```{r table_caption, echo = FALSE}
    library(knitr)
    knit_hooks$set(table_caption = function(before, options, envir) {
      if(!before) 
        paste("<table><caption>", options$table_caption, 
          paste0("</caption><colgroup><col width='100'></col></colgroup>",
            "<thead><tr class='header'></tr></thead><tbody></tbody></table><p>"),
          sep = '')
      else NULL
    })
    ```
    

    然后可以在表格中添加表格标题。

    ```{sql, connection=db, tab.cap=NA, table_caption="sql table caption"}
    WITH twoCol(a, b) AS (SELECT 1, 2 UNION SELECT 2, 4) SELECT a, b FROM twoCol;
    ```
    
    ```{r print-table, table_caption = "table caption"}
    datasets::mtcars %>%
      head(2)
    ```
    

    `

    【讨论】:

    • 您说得对,tab.cap 仅适用于 SQL 引擎。但是,SQL 表返回实际上只是一个从DBI::dbGetQuery 返回的 data.frame。我找到了添加标题的line from knitr::engine.R。我的问题变成了,有没有办法将 knitr 代码块选项中的参数传递给df_print?感谢@yihui-xie 添加图片。
    • 我相信这发生在rmarkdown::knit_print.Rline 22
    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2017-10-09
    • 2011-11-23
    • 2017-04-16
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多