【发布时间】:2019-05-16 00:47:58
【问题描述】:
我有一个数据表,我想在 Shiny 应用程序中按行显示不同的数字格式。我发现用户 Nice 以前的解决方案在所有列和行都是数字时有效,见此处: R Shiny DataTables: Format numbers not by column but by row
不幸的是,我的第一列是非数字的,对于我的表格,上述解决方案在第一列中给出了 NaN% 值,并且不格式化后面的列。我确信有办法解决这个问题,但我不懂 JavaScript,所以我不知道如何正确修改 rowCallback 函数。
这是我目前的尝试:
library(DT)
dat <- as.data.frame(matrix(c("# respondents",20,35,18,"involvement rate",.85,.8285,.8889,"target",.80,.85,.9),nrow=3,byrow=T))
datatable(dat,options=list(
rowCallback=JS("function( row, dat, index ) {
$('td:eq(0)', row).html(dat[0] % 1 != 0 | dat[0]==0 ? (dat[0]*100).toFixed(1) +'%':dat[0]);
$('td:eq(1)', row).html(dat[1] % 1 != 0 | dat[1]==0 ? (dat[1]*100).toFixed(1) +'%':dat[1]);
}
")))
感谢任何帮助!
编辑:我认为由于唯一预期的字符串将在第一列中,因此我可以将该列更改为行名:
dat2 <- subset(dat, select = -1)
rname <- as.vector(dat$V1)
row.names(dat2) <- rname
然后在 dat2 而不是 dat 上运行 datatable(...)。这会导致行名的 NaN% 相同,但现在第一个实际列的格式正确,但其余列的格式不正确。
【问题讨论】:
标签: javascript r shiny dt