На основе учебника с использованием пользовательского средства визуализации:
https://jrowen.github.io/rhandsontable/
вы можете сделать следующее (выполнить сопоставление строк вне js).
DF = data.frame(a = 1:4, b = 3:6, Comments = c("missed etc", "", "missed", ""))
rhandsontable(DF, row_highlight = which(grepl("missed", DF$Comments))-1, width = 550, height = 300) %>%
hot_cols(renderer = "function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
tbl = this.HTMLWidgets.widgets[0]
hrows = tbl.params.row_highlight
hrows = hrows instanceof Array ? hrows : [hrows]
if (hrows.includes(row)) {
td.style.background = 'yellow' }
}")
Редактировать : Это, очевидно, требует дополнительной модификации, если используется в качестве блестящего приложения.Как отмечено в документации :
При использовании этого подхода в блестящем приложении или в документе с более чем одним виджетом логика поиска виджета должна быть более устойчивой.
Если доступно instance.params
, мы можем попробовать следующее:
library(shiny)
library(rhandsontable)
DF = data.frame(a=1:10, b=3:12, c=c("Dog", "Cat", "Mouse", 5:11), d=3:12, e=1:10, f=1:10, g=1:10, h=2:11, Comments = c("missed etc", rep("", 7), "missed", ""))
ui <- fluidPage(
mainPanel(
rHandsontableOutput('table')
)
)
server = function(input, output, session) {
output$table <- renderRHandsontable({
row_highlight = which(grepl("missed", DF$Comments))-1
col_highlight = c(5,8)-1
rhandsontable(DF, row_highlight = row_highlight, col_highlight = col_highlight, width = 550, height = 300) %>%
hot_rows(fixedRowsTop = 1) %>%
hot_table(highlightCol = TRUE, highlightRow = TRUE) %>%
hot_validate_numeric(cols = c(3, 5), min = 0, max = 500) %>%
hot_col(c(1, 3, 5, 6, 8), valign = 'htCenter') %>%
hot_cols(renderer = "
function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
if (instance.params) {
hrows = instance.params.row_highlight
hrows = hrows instanceof Array ? hrows : [hrows]
hcols = instance.params.col_highlight
hcols = hcols instanceof Array ? hcols : [hcols]
if (hrows.includes(row)) {
td.style.background = 'yellow'
}
if (hcols.includes(col)) {
td.style.fontWeight = 'bold'
td.style.color = '#fc0f03'
}
}
}"
)
})
}
shinyApp(ui, server)
Редактировать : интегрированный второй рендерер с первым, так что форматирование столбцовне перезаписывает цвет фона строки.