2015-04-14 3 views
0

Я создаю dataTable, который имеет определенное пользователем количество строк & столбцов. Я хотел бы пропустить все ячейки в таблице (минус первый столбец, содержащий имена), и выделить/изменить CSS, если значения больше 10. У Shiny есть отличный пример ориентации на определенный столбец (см. Ниже). Я предполагаю, что мне нужно написать какую-то функцию jQuery? Я полный новичок jQuery, поэтому я попробовал, и, очевидно, он не работал (см. Ниже). Любая помощь будет принята с благодарностью!renderDataTable Выделить все ячейки, содержащие значение> 10, и выделить

Блестящий пример ориентации на конкретный столбец:

rowCallback = I(
    'function(row, data) { 
    // Bold cells for those >= 5 in the first column 
    if (parseFloat(data[0]) >= 5.0) 
     $("td:eq(0)", row).css("font-weight", "bold"); 
    }' 
) 

Моя неудавшаяся попытка написания функции перебрать клеток:

rowCallback = I(' 
       function(row, data) { 
       for each (i in 1:1000) { 
       if (parseFloat(data[i]) > 10.0) 
       $("td:eq(i)", row).css("color", "red");} 
       }') 

ответ

1

удалось реализовать его с этим (без установки DT):

rowCallback = I(
    'function(row, data) { 
     $("td", row).each(function(i) { 
      if (i == 0) return; // first column is row names 
      if (parseFloat(data[i]) >= 10.0) 
       $(this).css("color", "red"); 
     }); 
    }' 
) 
+0

Yup. В основном делали то же самое. Действительно ли таблицы данных устаревают? –

+0

'shiny :: renderDataTable()' будет устаревшим, и мы продолжим разработку в пакете ** DT **, поэтому 'I()' перестанет работать в будущем (используйте 'DT :: renderDataTable()' и 'JS()' вместо этого). –

1

for each (i in 1:1000) не выглядит как допустимый синтаксис JavaScript. Ниже приведен минимальный пример использования пакета DT (функции DataTables в shiny будут устаревшими в будущем). Это может быть немного сложно понять, если вы не знакомы с JavaScript (наша цель состоит в следующем: make it easier).

library(shiny) 
library(DT) 

shinyApp(

    ui = fluidPage(dataTableOutput('foo')), 

    server = function(input, output) { 
    output$foo = renderDataTable({ 
     datatable(iris, options = list(
     rowCallback = JS(
      'function(row, data) {', 
      '$("td", row).each(function(i) {', 
      'if (i == 0) return; // first column is row names', 
      'if (parseFloat(data[i]) >= 3.0)', 
       '$(this).css("color", "red");', 
      '});', 
      '}') 
    )) 
    }) 
    } 

) 

DT rowCallback

Чтобы установить DT в данный момент, вам нужно:

install.packages(
    c("DT", "shiny") 
    type = "source", 
    repos = c("http://yihui.name/xran", "http://cran.rstudio.com") 
) 

Вы сможете установить все нормально с CRAN после DT находится на CRAN.

+0

Спасибо Yihui! Это ответило на мой вопрос! –

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