【问题标题】:renderDataTable Select all cells containing value > 10 and highlightrenderDataTable 选择所有包含值 > 10 的单元格并突出显示
【发布时间】:2015-06-20 07:37:49
【问题描述】:

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

针对特定列的精彩示例:

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");}
               }')

【问题讨论】:

    标签: jquery r datatables shiny


    【解决方案1】:

    设法用这个实现它(不安装 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");
            });
        }'
    )
    

    【讨论】:

    • 是的。基本上也是这样做的。数据表真的被弃用了吗?
    • shiny::renderDataTable() 将被弃用,我们将继续在 DT 包中进行开发,因此I() 将在未来停止工作(使用DT::renderDataTable() 和@987654325 @ 代替)。
    【解决方案2】:

    for each (i in 1:1000) 看起来不像是有效的 JavaScript 语法。这是一个使用 DT 包的最小示例(shiny 中的 DataTables 函数将在未来被弃用)。如果您不熟悉 JavaScript,可能会有点难以理解(我们的目标是将来 make it easier)。

    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,您需要:

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

    DT 在 CRAN 上后,您将能够从 CRAN 正常安装所有内容。

    【讨论】:

    • 谢谢亿辉!这回答了我的问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多