Пробел после каждых пяти строк в выводе kable (с опцией booktabs) в документе R Markdown

Я использую knitr::kable() отображать таблицы как часть документа R Markdown (который сам является частью проекта уценки). В частности, опция booktabs (через настройку booktabs аргумент равных TRUE) рендерит стол в красивой форме. Тем не менее, я бы хотел, чтобы после каждых пяти строк не было пробела.

Вот, например, код и способ отображения таблицы в демоверсии bookdown при визуализации в формате PDF:

knitr::kable(
  head(iris, 20), caption = 'Here is a nice table!',
  booktabs = TRUE
)

ирис стол с буклетами

Я хотел бы, чтобы пространство, которое появляется после каждых пяти строк, не было включено, но я не могу найти параметр в knitr::kable() это делает это

3 ответа

Решение

Причина, по которой высота строки не всегда одинакова, заключается в том, что по умолчанию kable вставляет \addlinespaceevery каждые 5 строк, когда booktabs указан как TRUE, как показано здесь:

linesep = if (booktabs) c('', '', '', '', '\\addlinespace') else '\\hline'

Чтобы изменить это, добавьте linesep = "" в качестве аргумента kable(),

knitr::kable(
  head(iris, 20), caption = 'Here is a nice table!',
  booktabs = TRUE,
  linesep = ""
)

Смотрите раздел Избавление от \addlinespace в kable для более подробной информации.

Также стоит сказать, что вы можете поиграть с этой опцией, если хотите изменить стиль. Например linesep = c("", "", "", "\\hline") добавил бы горизонтальную линию каждые четыре пробела.

На основе приведенного выше примера меня интересовало управление разделением. Это хорошо работает со следующей вспомогательной функцией. Это позволяет контролировать места разделения линий.

      linesep<-function(x,y=character()){
  if(!length(x))
    return(y)
  linesep(x[-length(x)], c(rep('',x[length(x)]-1),'\\addlinespace',y))  
}
knitr::kable(
  head(iris, 20), caption = 'Here is a nice table!',
  booktabs = TRUE,
  linesep = linesep(c(3,2,1,1,3,5,4,1))
)

Ответ Барта не сработал для меня на моем удаленном сервере при использовании prettyNum() в таблице и передаче вывода в kableExtra::kable_styling(), где он просто добавил столбец, полный NA и без пробелов. Кажется, на моей локальной машине все работает нормально, поэтому я не могу воспроизвести ошибку. Во всяком случае, это альтернативное решение работает для меня (но только при передаче таблицы в kableExtra по какой-то причине):

      linesep <- function(table, groups) {
 sep_indx <- rep("", nrow(table))
 sep_indx[cumsum(groups)] <- '\\addlinespace'
 return(sep_indx)
}

knitr::kable(
  head(iris, 20),
  caption = 'Here is a nice table!',
  booktabs = TRUE,
  linesep = linesep(head(iris, 20), c(3, 2, 1, 1, 3, 5, 4, 1))
) %>% kableExtra::kable_styling(latex_options = c("scale_down", "HOLD_position"))

пример

Другие вопросы по тегам