对于R

时间:2017-01-05 05:27:53

标签: javascript r for-loop dt

我想在选项中使用带有rowCallback的数据表向表中添加条件格式。表格的大小将在Shiny应用程序中更改,我将根据第2列到最后一列中的值是否大于第1列中的值来应用背景。因此,我想在指定要格式化的列时加入for循环。

当我硬编码要将条件格式应用于哪些列时,以下运行正常:

if (!require(devtools)) install.packages("devtools"); library(devtools)
if (!require(DT)) devtools::install_github("rstudio/DT"); library(DT)

trial <- matrix(c(3,4,1,2,1,2,4,2,5), ncol=3)
colnames(trial) <- c('value', 'min', 'max')
trial.table <- data.frame(trial)

DT::datatable(trial.table,options = list(rowCallback = JS('
                                                          function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
                                                          if (parseFloat(aData[2]) > aData[1])
                                                          $("td:eq(2)", nRow).css("background-color", "orange");
                                                          if (parseFloat(aData[2]) > aData[1])
                                                          $("td:eq(3)", nRow).css("background-color", "orange");
                                                          }')))

但是,当我尝试循环时,显示为空白:

DT::datatable(trial.table,options = list(rowCallback = JS('
                                                          function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
                                                          for (i =2, i < 4, i++) {
                                                              if (parseFloat(aData[i]) > aData[1])
                                                              $("td:eq(i)", nRow).css("background-color", "orange");
                                                              }
                                                          }')))

for for循环在R中的Javascript中工作吗?

2 个答案:

答案 0 :(得分:0)

你缺少一个右大括号来关闭for循环。

答案 1 :(得分:0)

好的,我想出来了。这里有2个问题

  1. 语法错误。 JavaScript中for循环中的参数需要用分号分隔。
  2. 迭代变量i出现在for循环的第二行的双引号中。因此,JS不知道该怎么做,因为它在引号内。为了传递i的当前值,我们需要将它带到双引号之外。
  3. -

    public function getNameAttribute($value) {
        $name = json_decode($value, true);
        return $name[app()->getLocale()];
    }