Javascript R-使用DT按行格式化

Javascript R-使用DT按行格式化,javascript,r,shiny,dt,Javascript,R,Shiny,Dt,我有一个数据表,我想在一个闪亮的应用程序中按行显示不同的数字格式。我发现了用户NicE以前的解决方案,该解决方案在所有列和行都是数字时有效,如下所示: 不幸的是,我的第一列是非数字的,对于我的表,上面的解决方案在第一列中给出了NaN%的值,并且没有格式化后面的列。我肯定有办法解决这个问题,但我不懂JavaScript,所以我不知道如何正确修改rowCallback函数 以下是我目前的尝试: library(DT) dat <- as.data.frame(matrix(c("# resp

我有一个数据表,我想在一个闪亮的应用程序中按行显示不同的数字格式。我发现了用户NicE以前的解决方案,该解决方案在所有列和行都是数字时有效,如下所示:

不幸的是,我的第一列是非数字的,对于我的表,上面的解决方案在第一列中给出了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]);
                 }
                 ")))
库(DT)

dat当您执行
td:eq(j)
时,从
j=2开始。这将丢弃
0
-th列(行名称列)和
1
-th列。我还添加了
if(index>0)
以丢弃第一行(在Javascript中由
0
索引)。可以使用数字列创建数据框

library(DT)
dat <- data.frame(
  V1 = c("# respondents", "involvement rate", "target"),
  V2 = c(20, 0.85, 0.8),
  V3 = c(35, 0.8285, 0.85),
  V4 = c(18, 0.8889, 0.9)
)

datatable(dat,options=list(
  rowCallback=JS(c(
    "function(row, dat, index) {",
    "  if(index > 0){",
    "    for(var j=2; j<dat.length; j++){",
    "      $('td:eq('+j+')', row).",
    "        html((dat[j]*100).toFixed(1) + '%');",
    "    }",
    "  }",
    "}"
  ))
))
库(DT)
dat
library(DT)
dat <- data.frame(
  V1 = c("# respondents", "involvement rate", "target"),
  V2 = c(20, 0.85, 0.8),
  V3 = c(35, 0.8285, 0.85),
  V4 = c(18, 0.8889, 0.9)
)

datatable(dat,options=list(
  rowCallback=JS(c(
    "function(row, dat, index) {",
    "  if(index > 0){",
    "    for(var j=2; j<dat.length; j++){",
    "      $('td:eq('+j+')', row).",
    "        html((dat[j]*100).toFixed(1) + '%');",
    "    }",
    "  }",
    "}"
  ))
))