带有子行的数据表中的列名称为空白(或缺少)

时间:2019-07-12 16:13:26

标签: r datatables dt

我正在R中创建一个数据表,该数据表具有子行,手动定义的列名并且还隐藏了几列。

根据DT手册https://rstudio.github.io/DT/002-rowdetails.html中提供的示例,这似乎微不足道(即,它已经显示了如何创建子行和隐藏某些列)。但是,当我尝试添加'colnames'参数来定义非隐藏列的新列名称时,它的行为不符合预期。

我尝试删除空白列标题文本,添加其他内容以查看它是否与表中的原始列数有关。如果我取消了隐藏某些列的调用,则标题将按原样显示,但我无法删除列(它们需要隐藏),因为表已链接到使用这些隐藏列中的数据的绘图对象。

library(DT)

datatable(
  cbind(' ' = '⊕', mtcars), escape = -2,
  colnames = c(" ", "GEAR COLUMN", "CARB COLUMN"), # This is the only line added to the original DT example.
  options = list(
    columnDefs = list(
      list(visible = FALSE, targets = c(0, 2, 3:10)), # Removing this line solves the header issue but then all columns are shown.
      list(orderable = FALSE, className = 'details-control', targets = 1)
    )
  ),
  callback = JS("
  table.column(1).nodes().to$().css({cursor: 'pointer'});
  var format = function(d) {
    return '<div style=\"background-color:#eee; padding: .5em;\"> Model: ' +
            d[0] + ', mpg: ' + d[2] + ', cyl: ' + d[3] + '</div>';
  };
  table.on('click', 'td.details-control', function() {
    var td = $(this), row = table.row(td.closest('tr'));
    if (row.child.isShown()) {
      row.child.hide();
      td.html('&oplus;');
    } else {
      row.child(format(row.data())).show();
      td.html('&CircleMinus;');
    }
  });"
  ))

未提供错误消息,它仅显示为正常但没有所有已定义的列标题。

我怀疑这是一个相对简单的事情,对于那些有JS调用经验的人来说非常有意义,但是不幸的是,这不是我的专长。

1 个答案:

答案 0 :(得分:1)

如果您想重命名gearcarb列,则可以

colnames = c("GEAR COLUMN" = "gear", "CARB COLUMN" = "carb")