#r #renderer #rhandsontable
Вопрос:
У меня есть фреймы данных (color_cells), содержащие количество столбцов и строк в ячейках фрейма данных, которые должны быть окрашены в таблицу rand. Как я могу передать эту информацию визуализатору в renderRHandsontable?
library(shiny)
library(rhandsontable)
ui <- fluidPage(
rHandsontableOutput('hot')
)
server <- function(input, output, session) {
color_cells <<- data.frame(col=c(1,2,3),row=c(2,4,5))
output$hot <- renderRHandsontable({
rhandsontable(mtcars, readOnly = TRUE, width = 750, height = 300) %>%
hot_cols(renderer = myrenderer)
})
myrenderer <- "function (instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
for ( i in 1:length(color_cells$row) ) {
r <- color_cells[i,'row']
c <- color_cells[i,'col']
if (col == c amp; row == r ) {
td.style.background = 'pink';
}
}
}"
}
shinyApp(ui = ui, server = server)
Ответ №1:
Вот что нужно попробовать — дайте мне знать, если это сработает.
При вызове rhandsontable
включите два пользовательских параметра, которые будут содержать векторы, представляющие столбцы и строки для выделения color_cells
.
В вашем пользовательском средстве визуализации создайте массивы из этих двух векторов, хранящихся в парах. Затем вы можете установить цвет фона, если столбец и строка соответствуют параметрам.
server <- function(input, output, session) {
color_cells <<- data.frame(col=c(1,2,3),row=c(2,4,5))
output$hot <- renderRHandsontable({
rhandsontable(mtcars,
col_highlight = color_cells$col - 1,
row_highlight = color_cells$row - 1,
readOnly = TRUE,
width = 750,
height = 300) %>%
hot_cols(renderer = myrenderer)
})
myrenderer <- "function(instance, td, row, col, prop, value, cellProperties) {
Handsontable.renderers.TextRenderer.apply(this, arguments);
if (instance.params) {
hcols = instance.params.col_highlight
hcols = hcols instanceof Array ? hcols : [hcols]
hrows = instance.params.row_highlight
hrows = hrows instanceof Array ? hrows : [hrows]
for (i = 0; i < hcols.length; i ) {
if (hcols[i] == col amp;amp; hrows[i] == row) {
td.style.background = 'pink';
}
}
}
}"
}
Комментарии:
1. Большое спасибо, Бен. Это поможет!
2. Отлично! Не стесняйтесь принимать ответ, если это уместно.