如何根据公式而不是像元值来更改Shiny DT表的像元颜色?

问题描述 投票:0回答:1

我想知道是否有可能不根据单元格的值而是根据单元格值和用户提供的另一个参考编号之间的差异来更改DT表单元格背景的颜色。因此,如果差异是<2个单元格被涂成绿色,如果两个以上单元格被涂成红色,等等。这个想法是能够使用一些评估/公式,而不仅仅是单元格值。

下面是使用单元格值作为标准的经典示例,这不是我所需要的。谢谢!

library(shiny)
library(DT)
#> 
#> Attaching package: 'DT'
#> The following objects are masked from 'package:shiny':
#> 
#>     dataTableOutput, renderDataTable

ui <- shinyUI(fluidPage(

    mainPanel(
      DT::dataTableOutput("table")
    )

))

server <- shinyServer(function(input, output) {
  dfr <- data.frame("x"=c(1, 2, 3),
                    "y"=c(10, 12, 14))

  Reference <- 13

  output$table <- DT::renderDataTable(datatable(dfr) %>% formatStyle('y', backgroundColor = styleEqual(c(10, 12, 14), c('gray', 'yellow', 'red'))))

})

shinyApp(ui = ui, server = server)
shiny dt
1个回答
0
投票

这里有一个可能的解决方案。可能需要一些其他调整才能完全获得所需的功能,但关键功能应该在那里。我使用了您可能感兴趣的formattable软件包。

library(shiny)
library(DT)
library(dplyr)
library(formattable)

ui <- shinyUI(fluidPage(

  mainPanel(
    textInput("input", "put number here"),
    DT::dataTableOutput("table")
  )

))

server <- shinyServer(function(input, output) {

   dfr <- data.frame("x"=c(1, 2, 3),
                     "y"=c(10, 12, 14))

  output$table <- DT::renderDataTable(as.datatable(formattable(dfr, list(
    y = formatter("span", 
                  style = y ~ style(
                    color = ifelse(y - as.numeric(input$input) >= 2, "green", ifelse(y - as.numeric(input$input) <= -2, "red", "black"))))
  ))))

})

shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.