如何使用df_print添加表格标题?

时间:2018-01-23 21:09:51

标签: r knitr r-markdown bookdown blogdown

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

我知道直接使用kable功能会有效,但我希望使用df_print

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

Example image

可重复的示例

---
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)
```

1 个答案:

答案 0 :(得分:0)

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

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

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

PS:Section 1.5

一样
  

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

但是,我发现 blogdown 支持df_print

修改

无论kable()是什么,

sql table 始终使用df_print打印。我们可以通过tab.cap = NA停用 sql table 标题。

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

```{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)
```

`