Я использую blogdown для создания блога, в котором есть несколько таблиц.Создание одной таблицы с использованием функции kable
работает нормально.Если вы сделаете
blogdown::new_site()
blogdown::new_post("test", ext = ".rmd")
Новый файл rmd будет создан в каталоге content/post
проекта.Если вы откроете этот файл и создадите одну таблицу, выполнив
```{r test1}
library(knitr)
library(magrittr)
library(shiny)
data.frame(a= c(1,2,3)) %>% kable(caption = 'test',format = 'html')
```
Будет сгенерирована правильно отформатированная таблица.Заголовок будет выглядеть так: «Таблица 1: тест». Если вы посмотрите на код сгенерированного сайта, заголовок будет выглядеть следующим образом.
<caption>
<span id="tab:test1">Table 1: </span>test
</caption>
В идеале у меня нет никакого желания помечать таблицу какTable 1
во-первых, но это другой вопрос.Если форматирование заголовков с помощью kable можно полностью отключить, я также буду рад.
Однако, если вместо этого я использую lapply для создания 2 таблиц
```{r test2}
lapply(1:2,function(x){
data.frame(a= c(1,2,3)) %>% kable(caption = 'test2',format = 'html') %>% HTML()
}) -> tables
tables[[1]]
tables[[2]]
```
У заголовков будет префикс \#tab:test2
.Если вы посмотрите на заголовок этих таблиц, вы увидите
<caption>(\#tab:test2)test2</caption>
Вопрос в том, , почему kable
ведет себя иначе, когда его вызывают из lapply
по сравнению споведение снаружи?Обратите внимание, что оба эти поведения отличаются от его поведения при простом связывании файла как html_document
.
. Я немного покопался в коде kable
и обнаружил, что ссылка на заголовок создаетсяknitr:::create_label
функция.Изучая эту функцию, я увидел ту часть, которая отвечает за неправильное поведение нескольких таблиц.
if (isTRUE(opts_knit$get("bookdown.internal.label"))) {
lab1 = "(\\#"
lab2 = ")"
}
Я не смог найти код, отвечающий за «правильное» поведение с одной таблицей, ноПохоже, что внутренние параметры knitr ответственны за это.
В конечном итоге мне нужно просто поведение
<caption>test</caption>
, которое происходит при простом вязании html-документа.Но мне еще предстоит найти способ установить соответствующие параметры knitr и почему они различаются в одном документе.
Редактировать: Дальнейшее изучение показывает, что проблема не является специфической.Он может быть реплицирован с использованием цикла for или даже {
сам по себе.Полный пост со всеми проблемными примерами можно найти в этом выпуске на странице gitub knitr. Это репозиторий github включает в себя базовый блог-сайт, который повторяет проблему