R 带有数据表的子表(展开/折叠)

R 带有数据表的子表(展开/折叠),r,datatables,r-markdown,R,Datatables,R Markdown,我喜欢使用Childtable构建数据表,例如,使用以下数据: test = data.table(c(375, 789, 72, 663, 100), c(1237, 1237, 1237, 663, 100), c("abc", "abc", "abc", "d", "e"), c("a","b","c","d","e")) 首先我想要一张桌子: datatable(test[, .(V2,V3)][3:5]) 单击abc,我希望能够展开该数据表,以便如下所示: datatable(te

我喜欢使用Childtable构建数据表,例如,使用以下数据:

test = data.table(c(375, 789, 72, 663, 100), c(1237, 1237, 1237, 663, 100), c("abc", "abc", "abc", "d", "e"), c("a","b","c","d","e"))
首先我想要一张桌子:

datatable(test[, .(V2,V3)][3:5])
单击abc,我希望能够展开该数据表,以便如下所示:

datatable(test[, .(V1, V4)][1:3])
输出将是一个用rmarkdown编写的html文件。
提前感谢您的帮助和感谢。

这里有一些您可以开始的东西。 基于@Stéphane答案的代码

库(DT)
数据表(
cbind(“”=“”,
mtcars),逃逸=-2,
选项=列表(
columnDefs=list(
列表(可见=假,目标=c(0,2,3)),
列表(orderable=FALSE,className='details control',targets=1)
)
),
回调=JS(“
table.column(1).nodes()到$().css({cursor:'pointer'});
变量格式=函数(d){
返回“”+
''+
''+
“第一列”+
“第二栏”+
''+
''+
''+
''+
''+d[2]+''+
''+d[3]+''+
'' +
''
'';
};
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(“”);
}否则{
row.child(格式(row.data()).show();
td.html(“”);
}
});"
))

有关更多详细信息,请参见
datatable
网站。

这里是您可以开始的内容。 基于@Stéphane答案的代码

库(DT)
数据表(
cbind(“”=“”,
mtcars),逃逸=-2,
选项=列表(
columnDefs=list(
列表(可见=假,目标=c(0,2,3)),
列表(orderable=FALSE,className='details control',targets=1)
)
),
回调=JS(“
table.column(1).nodes()到$().css({cursor:'pointer'});
变量格式=函数(d){
返回“”+
''+
''+
“第一列”+
“第二栏”+
''+
''+
''+
''+
''+d[2]+''+
''+d[3]+''+
'' +
''
'';
};
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(“”);
}否则{
row.child(格式(row.data()).show();
td.html(“”);
}
});"
))

有关更多详细信息,请参见
datatable
网站。

请参见良好开端,但我需要作为datatable本身的下拉信息。这可能吗?请看好的开始,但我需要下拉信息作为数据表本身。这有可能吗?
library(DT)
datatable(
  cbind(' ' = '<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>', 
        mtcars), escape = -2,
  options = list(
    columnDefs = list(
      list(visible = FALSE, targets = c(0, 2, 3)),
      list(orderable = FALSE, className = 'details-control', targets = 1)
    )
  ),
  callback = JS("
                table.column(1).nodes().to$().css({cursor: 'pointer'});
                var format = function(d) {
                return '<table cellpadding=\"5\" cellspacing=\"0\" border=\"0\" style=\"padding-left:50px;\"> ' +
'<thead>'+
'<tr>'+
            '<th>1st column</th>'+
            '<th>2nd column</th>'+
        '</tr>'+
'</thead>'+
'<tbody>'+
'<tr>'+
            '<td>'+d[2]+'</td>'+
            '<td>'+d[3]+'</td>'+
        '</tr>' +
'</tbody>'
'</table>';
                };
                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('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_open.png\"/>');
                } else {
                row.child(format(row.data())).show();
                td.html('<img src=\"https://raw.githubusercontent.com/DataTables/DataTables/master/examples/resources/details_close.png\"/>');
                }
                });"
))