renderDataTable选择包含值> 10的所有单元格并突出显示

我正在创建一个具有用户定义的行数和列数的dataTable。 我想循环遍历表中的所有单元格(减去第一列,其中包含名称),并在值大于10时突出显示/更改CSS.Shiny有一个很好的例子,可以定位特定的列(见下文)。 我假设我需要编写某种jQuery函数? 我是一个完整的jQuery新手,所以我试了一下,而且,它显然没有用(也见下文)。 任何帮助将不胜感激!

定位特定列的shiny示例:

rowCallback = I( 'function(row, data) { // Bold cells for those >= 5 in the first column if (parseFloat(data[0]) >= 5.0) $("td:eq(0)", row).css("font-weight", "bold"); }' ) 

我尝试编写循环遍历单元格的函数失败了:

 rowCallback = I(' function(row, data) { for each (i in 1:1000) { if (parseFloat(data[i]) > 10.0) $("td:eq(i)", row).css("color", "red");} }') 

管理用它实现它(不安装DT):

 rowCallback = I( 'function(row, data) { $("td", row).each(function(i) { if (i == 0) return; // first column is row names if (parseFloat(data[i]) >= 10.0) $(this).css("color", "red"); }); }' ) 

for each (i in 1:1000)看起来不像有效的JavaScript语法。 这是使用DT包的最小示例(将来不推荐使用shiny的DataTables函数)。 如果您不熟悉JavaScript(我们的目标是将来更容易 ),可能会有点难以理解。

 library(shiny) library(DT) shinyApp( ui = fluidPage(dataTableOutput('foo')), server = function(input, output) { output$foo = renderDataTable({ datatable(iris, options = list( rowCallback = JS( 'function(row, data) {', '$("td", row).each(function(i) {', 'if (i == 0) return; // first column is row names', 'if (parseFloat(data[i]) >= 3.0)', '$(this).css("color", "red");', '});', '}') )) }) } ) 

DT rowCallback

要在此时安装DT ,您需要:

 install.packages( c("DT", "shiny") type = "source", repos = c("http://yihui.name/xran", "http://cran.rstudio.com") ) 

DT处于CRAN之后,您将能够通常从CRAN安装所有内容。