R数据表rowCallback与DT
Posted
技术标签:
【中文标题】R数据表rowCallback与DT【英文标题】:R datatable rowCallback with DT 【发布时间】:2015-10-02 06:38:32 【问题描述】:我正在尝试使用 DT 和 magrittr 包对数据表对象执行两种不同的格式化操作。一个使用辅助函数 formatRound(),另一个作为 javascript 传递给数据表函数中的 rowCallback 选项。
当我单独运行任一格式化操作时,数据表会以预期的格式呈现。但是,当我同时运行两者时,数据表呈现空白,但我没有收到错误。
这段代码显示了我所描述的行为。
library(magrittr)
library(DT)
df = data.frame(matrix(rnorm(20), nrow=10))
datatable(
data = df
) %>%
formatRound(c("X1", "X2"), 1)
#table renders as expected
datatable(
data = df,
options = list(
rowCallback = JS("
function( row, data, index )
if ( index > 2 )
$(row).css('background-color', '#EDEDED');
else if ( index > 0 )
$(row).css('background-color', '#DEDEDE');
else
$(row).css('background-color', '#D3D3D3');
"
)
)
)
#table renders as expected
datatable(
data = df,
options = list(
rowCallback = JS("
function( row, data, index )
if ( index > 2 )
$(row).css('background-color', '#EDEDED');
else if ( index > 0 )
$(row).css('background-color', '#DEDEDE');
else
$(row).css('background-color', '#D3D3D3');
"
)
)
) %>%
formatRound(c("X1", "X2"), 1)
#table renders as blank but with no error returned
【问题讨论】:
【参考方案1】:如果您在浏览器的 JS 控制台中查看第三次尝试的 JS 函数(单击“浏览器中的“检查元素选项”),它会显示一个错误,指出“var”未识别,因为它在JS函数作用域:
(
var d = parseFloat(data[1]); $(this.api().cell(row, 1).node()).html(isNaN(d) ? '' : d.toFixed(1));
var d = parseFloat(data[2]); $(this.api().cell(row, 2).node()).html(isNaN(d) ? '' : d.toFixed(1));
function( row, data, index )
if ( index > 2 )
$(row).css('background-color', '#EDEDED');
else if ( index > 0 )
$(row).css('background-color', '#DEDEDE');
else
$(row).css('background-color', '#D3D3D3');
)
如果你把这两行放在 JS 函数中,它就完美了。
您可以在下面找到更新后的代码。
datatable(
data = df,
options = list(
rowCallback = JS("
function( row, data, index )
var d = parseFloat(data[1]);
$(this.api().cell(row, 1).node()).html(isNaN(d) ? '' : d.toFixed(1));
var d = parseFloat(data[2]);
$(this.api().cell(row, 2).node()).html(isNaN(d) ? '' : d.toFixed(1));
if ( index > 2 )
$(row).css('background-color', '#EDEDED');
else if ( index > 0 )
$(row).css('background-color', '#DEDEDE');
else
$(row).css('background-color', '#D3D3D3');
"
)
)
)
【讨论】:
好的,我现在明白了。谢谢! 如果回答对你有帮助,请采纳,这样对以后的人也有帮助! 您好,如果我想在 if 条件中写 index = (last row index) 而不是 index > 2,那么在不同长度的表的情况下如何写?以上是关于R数据表rowCallback与DT的主要内容,如果未能解决你的问题,请参考以下文章