Мой ответ ниже действительно тупой .. Вот правильный путь:
Эта функция встроена в htmlTable
через css.cell
аргумент:
css.cell
элемент позволяет добавлять любой возможный стиль CSS в ячейки таблицы. Если вы предоставите вектор в вектор, то предполагается, что стили должны повторяться по всем столбцам. Если вы предоставите матрицу такого же размера, как ваш аргумент x. Если есть ncol(x) + 1
, первая строка будет соответствовать стилю rowname. Соответственно, если размер равен nrow(x) + 1
, предполагается, что первая строка является строкой заголовка.
Так В основном вам просто нужно определить матрицу стилей для каждой ячейки:
x <- head(cars)
## indices defining where the styles go
where <- rbind(c(2,2), c(2,1), c(5,2))
style <- c('background-color: red; color: white;',
'border: solid 1px;',
'font-weight: 900; color: blue;')
css.cell <- matrix('', nrow(x), ncol(x))
css.cell[where] <- style
# [,1] [,2]
# [1,] "" ""
# [2,] "border: solid 1px;" "background-color: red; color: white;"
# [3,] "" ""
# [4,] "" ""
# [5,] "" "font-weight: 900; color: blue;"
# [6,] "" ""
htmlTable(head(cars), css.cell = css.cell)
Трудно сказать, если вы обмениваетесь назад и вперед, но расстояние в этом стол и аналогичный ниже немного отличается. Пример inject_div
выглядит несколько более центрированным.
Немного поздно, но @CyrusMohammadian сделал комментарий на мой другой ответ, и так как комментарий/вопрос такой же, как этот, я добавлю ответ здесь, а не редактирование мой ответ, который был для (слегка) другой вопрос.
Таблицы могут быть сложными, и каждый имеет разные функции, которые они хотят. Я не думаю, что у Max есть решения, встроенные для них всех.
Таким образом, самый простой способ, как я полагал, (hackily) вставить некоторые html/css в ваш стол (возможно, вы также можете сделать это после запуска htmlTable
, то есть непосредственно в html-коде, но это проще, я думаю) :
#' Inject div
#'
#' Inject an html division tag with style attribute.
#'
#' @param x a matrix or data frame
#' @param where an \code{nx2} matrix of row and column indices or vector (of
#' the form c(row, col, row, col, ...)) specifying which cells to select
#' @param style vector of character string(s) applied to each cell, recycled
#' if necessary
inject_div <- function(x, where, style = 'background-color: lightgrey; border: solid 1px') {
if (!all(sapply(style, nzchar)))
return(x)
where <- matrix(where, ncol = 2L, byrow = !is.matrix(where))
style <- rep_len(style, nrow(where))
if (length(where) > 0)
x[where] <- sprintf('<div style=\'%s\'>%s</div>',
gsub(';*$', ';', style), x[where])
x
}
library('htmlTable')
htmlTable(inject_div(head(cars), cbind(2,2)))
htmlTable(inject_div(head(cars), where = c(2,2,2,1,5,2),
## equivalently
# where = rbind(c(2,2), c(2,1), c(5,2))
style = c('background-color: red; color: white;',
'border: solid 1px;',
'font-weight: 900; color: blue;')))
Заканчивать пакет форматтера, https://cran.r-project.org/web/packages/f ormattable/vignettes/formattable-data-frame.html. Я получил свои требования к форматированию таблиц, полностью покрытые этим (по-сотовому форматированию), используя только этот пакет, который вызывает функцию knitr :: kable. – Nova