Проблема здесь не в именах столбцов.formatStyle
не принимает прокси-объект в качестве аргумента, он ожидает табличный объект, созданный из datatable()
.
См. ?dataTableProxy
для функций, доступных для манипулирования существующими экземплярами с возможностью датирования.Соответственно, вы не можете напрямую изменить цвет фона с помощью dataTableProxy.
Однако одной из функций, доступных для работы с прокси-объектами, является replaceData()
, которую вы используете выше.Кроме того, formatStyle
дает нам возможность установить цвет фона на основе данных, доступных в таблице .
Соответственно, вы можете создать вспомогательный столбец (и динамически изменить его), содержащий информациюв качестве цвета фона спрячьте его и скажите formatStyle
, чтобы изменить цвет в соответствии с этим столбцом.
Вот рабочий пример:
library(shiny)
library(DT)
ui <- fluidPage(
fluidRow(
DT::dataTableOutput("myplot")
)
)
server <- function(input, output) {
mycolors <- c("red", "green", "blue")
output$myplot <- DT::renderDataTable({
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)), "background_color" = sample(mycolors, 1))
HideCols <- which(names(DF) %in% c("background_color"))
datatable(DF, options = list(columnDefs = list(list(visible=FALSE, targets=HideCols)))) %>% formatStyle(
"background_color",
target = "row",
backgroundColor = styleEqual(levels = mycolors, values = mycolors)
)
})
proxy <- DT::dataTableProxy("myplot")
observe({
invalidateLater(1000)
DF <- data.frame(replicate(5, sample(rnorm(5), 10, rep = TRUE)), "background_color" = sample(mycolors, 1))
proxy %>% replaceData(DF)
})
}
shinyApp(ui = ui, server = server)
Для получения дополнительной информации см. this .