2017-01-05 1 views
0

Я хотел бы добавить условное форматирование в таблицу, используя datatable with rowCallback в параметрах. Размер таблицы изменится в приложении «Блестящее», и я захочу применить фон, основанный на том, что значения во втором и последнем столбцах больше значений в первом столбце. Таким образом, я хотел бы включить цикл for, задавая, какие столбцы следует форматировать.Для цикла в javascript-коде внутри rowCallback опция функции datatable в R

следующих пробегов просто прекрасен, когда я жёстко столбцы Я хотел бы применить условное форматирование к:

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"); 
                   } 
                  }'))) 

Do for loop работают внутри Javascript в R?

ответ

0

Хорошо, я понял это. Здесь есть 2 вопроса

  1. Синтаксическая ошибка. Аргументы в цикле for в JavaScript должны быть разделены точкой с запятой.
  2. Итеративная переменная i отображается в двойных кавычках во второй строке цикла for. Таким образом, JS не знает, что с этим делать, потому что оно находится в кавычках. Чтобы передать текущее значение i, нам нужно вывести его за пределы двойных кавычек.

-

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) { 
                  for (i=2; i < 4; i++) { 
                   if (parseFloat(aData[i]) > aData[1]) 
                   $("td:eq(" + i + ")", nRow).css("background-color", "orange"); 
                   } 
                  }'))) 
0

Вам не хватает правильной фигурной скобки, чтобы закрыть цикл for.

+0

Стив, я (фиксировано сейчас), но таблица по-прежнему не отображается с фигурной скобкой, либо. –

Смежные вопросы