如何根据其值更改 R Shiny 数据表单元格的单元格颜色?

mic*_*404 4 r html-table shiny

我正在尝试根据其值更改 R Shiny 数据表的单元格颜色。例如,我创建了以下应用程序:

# ui.R

fluidPage(
  # Outputting data table.
  DT::dataTableOutput("table")
)

# server.R

library(DT)

data(iris)

function(input, output) {

  # Rendering data table.
  output$table <- DT::renderDataTable({
    head(iris)
  },
  options = list(dom = "t",
                 ordering = FALSE))

}
Run Code Online (Sandbox Code Playgroud)

以下是从上述代码生成的 HTML 框架和结果页面:

R Shiny 生成的 HTML 代码,将 iris 数据集的前 6 行显示为数据表

iris 数据集的前 6 行在 R Shiny 中显示为数据表

例如,假设我希望所有包含整数的单元格都涂成红色。有选择地,我只想为第 2 行第 2 列和第 5 行第 1 列的单元格着色,其中值分别为 3 和 5。这在 R Shiny 中可能吗?

我目前的解决方法是在服务器端设置单个单元格的类,然后用 CSS 为它们着色。但是,我找不到办法做到这一点。

div*_*san 7

此页面有一堆格式化 DT 数据表的技巧:https://rstudio.github.io/DT/010-style.html

对于您的具体问题,有一个功能formatStyle可以让您根据表中的特定值设置美观度:

library(DT)
options(DT.options = list(pageLength = 5))
df = as.data.frame(cbind(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE)))

# style V6 based on values of V6
datatable(df) %>% formatStyle(
    'V6',
    backgroundColor = styleEqual(c(0, 1), c('gray', 'yellow'))
)

# style V1 based on values of V6
datatable(df) %>% formatStyle(
    'V1', 'V6',
    backgroundColor = styleEqual(c(0, 1), c('gray', 'yellow'))
)
Run Code Online (Sandbox Code Playgroud)


luk*_*keA 6

这里有两个想法:

我希望所有包含整数的单元格都涂成红色

(1) 使用 Javascript 标记整数:

library(DT)
df <- head(iris)
df %>% 
  datatable %>% 
  formatStyle(1:4, color = JS("value % 1 === 0 ? 'red' : ''"))
Run Code Online (Sandbox Code Playgroud)

有选择地,我只想为第 2 行第 2 列和第 5 行第 1 列的单元格着色

(2) 使用隐藏值列标记单元格:

m <- matrix(F, ncol = ncol(df)-1, nrow = nrow(df))
m[rbind(c(2,2),c(5,1))] <- TRUE
df %>% 
  cbind(m) %>% 
  datatable(
    options=list(columnDefs = list(list(visible=FALSE, targets=1:4+ncol(df)))),
  ) %>% 
  formatStyle(
    columns = 1:4, 
    valueColumns = 1:4+ncol(df), 
    color = styleEqual(c(1,0), c("red", "black"))
  )
Run Code Online (Sandbox Code Playgroud)

我是从 Shiny 中抽象出来的,因为这似乎是一个数据表问题。此外,可能还有更好的选择。