首页 > 解决方案 > R Shiny数据表基于SelectInput突出显示行

问题描述

我有一个闪亮的应用程序,它输出一个数据表。我希望数据表中的一行与selectInput选择器相对应突出显示绿色(即选择“ C”时,整个行将被彩色绿色 - 对于其他选项,则相同)。谁能告诉我我会怎么做?

library(shiny)

dat <- data.frame(grp = c("A", "B", "C"),
                  val = 1:3)

ui <- fluidPage(
  selectizeInput("grp", "Select Group", choices = c("A", "B", "C")),
  dataTableOutput("tab")
)

server <- function(input, output, session) {
  output$tab <- renderDataTable(
    datatable(dat)
  )
}

shinyApp(ui, server)

标签: rshiny

解决方案


使用[ docs ]formatStyle设置行中的反应值backgroundColorstyleEqual()

library(shiny)

grp_list <- c("A", "B", "C")
dat <- data.frame(grp = grp_list,
                  val = 1:3)

ui <- fluidPage(
  selectizeInput("grp", "Select Group", choices = grp_list),
  dataTableOutput("tab")
)

server <- function(input, output, session) {
  vals <- reactiveValues(
    row_priority = grp_list,
    row_color = rep('white', 3)
  )
  
  observeEvent(input$grp, {
    vals$row_priority <- 
      c(input$grp, vals$row_priority[vals$row_priority != input$grp])
    vals$row_color <- c('lightgreen', 'white', 'white')
  })
  
  output$tab <- renderDataTable(
    datatable(dat) %>% 
      formatStyle("grp",
                  target = "row",
                  backgroundColor = styleEqual(vals$row_priority, 
                                               vals$row_color, 
                                               default = 'white')
      )
  )
}
shinyApp(ui, server)

在此处输入图像描述


推荐阅读