在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")
```
可重复的示例
---
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)
```
答案 0 :(得分:0)
这不是一个答案,我只是想表达自己的看法。
df_print
用于打印数据框,SQL代码块的输出是 SQL TABLE ,而不是数据框。
块选项tab.cap
可能仅适用于SQL引擎,这意味着我们必须直接使用函数kable()
为数据框添加表格标题。
PS:与Section 1.5:
一样目前,并非支持
rmarkdown::html_document
的所有功能 blogdown ,例如df_print
,code_folding
,code_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)
```
`