如何使用R DT根据颜色向量为数据表中的文本着色?

如何使用R DT根据颜色向量为数据表中的文本着色?,r,datatables,shiny,dt,R,Datatables,Shiny,Dt,我正在开发一个R Shining应用程序,并希望根据我提供的颜色向量重新计算数据表中的方块。下面是一个不起作用的简单示例。我知道你可以根据数值给单元格和文本上色,但我需要提供精确的颜色。任何帮助都将不胜感激 libarry(DT) # set the colors for each box mycolors = c("dodgerblue2","grey","firebrick2") # recolor entire row (works) DT::datatable(data.frame(

我正在开发一个R Shining应用程序,并希望根据我提供的颜色向量重新计算数据表中的方块。下面是一个不起作用的简单示例。我知道你可以根据数值给单元格和文本上色,但我需要提供精确的颜色。任何帮助都将不胜感激

libarry(DT)

# set the colors for each box
mycolors = c("dodgerblue2","grey","firebrick2")

# recolor entire row (works)
DT::datatable(data.frame(src=c(1,2,3),tgt=c("█"   ,"█"  ,"█")),escape=F)  %>%
formatStyle(columns = 1, color = "red") %>%
formatStyle(columns = 2, color = "blue")

# recolor based on mycolors (doesn't work)
DT::datatable(data.frame(src=c(1,2,3),tgt=c("█"   ,"█"  ,"█")),escape=F)  %>%
formatStyle(columns = 1, color = "red") %>%
formatStyle(columns = 2, color = mycolors)
以下是一个解决方案:

dat <- data.frame(src=c(1,2,3), tgt=c("&#9608;", "&#9608;", "&#9608;"))
mycolors <- c("dodgerblue2", "grey", "firebrick2")
rgbcolors <- apply(grDevices::col2rgb(mycolors), 2, 
                   function(rgb) sprintf("rgb(%s)", paste(rgb, collapse=",")))
column <- 2
jscode <- paste("function(row, data, index) {",  
                  sprintf("var colors=%s;\n$(this.api().cell(index, %s).node()).css('color', colors[index]);", 
                          sprintf("[%s]", paste(sprintf("'%s'", rgbcolors), collapse=", ")), column), "}", sep="\n")
datatable(dat, escape=FALSE, 
          options = list(rowCallback=JS(jscode))
)
字符串
jscode
是行回调的Javascript代码:

> cat(jscode)
function(row, data, index) {
var colors=['rgb(28,134,238)', 'rgb(190,190,190)', 'rgb(238,44,44)'];
$(this.api().cell(index, 2).node()).css('color', colors[index]);
}

完美。非常感谢。虽然这样做很好,但我的表格颜色排序不正确(在我闪亮的应用程序中)。请在此跟进问题()。
> cat(jscode)
function(row, data, index) {
var colors=['rgb(28,134,238)', 'rgb(190,190,190)', 'rgb(238,44,44)'];
$(this.api().cell(index, 2).node()).css('color', colors[index]);
}