如何根据条件为Shiny renderDataTable()中的整个单元着色

时间:2018-06-21 09:29:16

标签: css r shiny

我很难找到一种使用涉及另一列B的条件为A列中的单元格着色的方法。

我发现包装(DT)在单元格中具有完美的背景,但根据涉及其他列的公式无法着色。

包(格式表)执行涉及两列的条件,并且如果我将值更改为

style = ~ style(background = ifelse(S2 >= 50, "lightgreen", "red"))

背景应用于该值,而不应用于单元格本身,这不是我想要的。

反正有做到这一点,谢谢

1 个答案:

答案 0 :(得分:3)

tableHTML包可能就是您想要的

您可以在此处看到很多有关条件格式可以做什么的示例: conditional formatting

您可以尝试这个带有光泽的小示例,看看您可以使用它做什么:

library(shiny)
library(tableHTML)

ui <- shinyUI(fluidPage(
  titlePanel(title = "tableHTML"),

  sidebarLayout(
    sidebarPanel(h3("Select a Dataset:"),
                 # input
                 selectInput("in_name", "Dataset:", "iris",''),
                 actionButton("in_click", "Submit")),

    mainPanel(h3("Main Panel"), h4("Output"),
              # output
              htmlOutput("out_name"))
    )))

server <- shinyServer(
  function(input, output){
    # # eventReactive
   observeEvent(input$in_click, {df <- eval(parse(text=input$in_name))

    output$out_name <- render_tableHTML({
      # here is the tableHTML part
      tableHTML(df[c(1:5, 51:55, 101:105), 1:4],
                rownames = FALSE,
                headers = rep(c('Length', 'Width'), 2),
                second_headers = list(c(1, 2, 2), c('Species', 'Sepal', 'Petal'))) %>%
        add_css_conditional_column('colour_rank',
                                   colour_rank_theme = 'White-Green',
                                   columns = 1:2,
                                   same_scale = FALSE) %>%
        add_css_conditional_column('colour_rank',
                                   colour_rank_theme = 'White-Blue',
                                   columns = 3:4,
                                   same_scale = FALSE)})
    })
  })

shinyApp(ui, server)