如何在闪亮的app中显示一个矩阵A,其单元格颜色取决于另一个矩阵B的单元格?

时间:2017-09-22 14:23:11

标签: r shiny dt

我有一个带有正值和负值的矩阵 M 。我有另一个矩阵 X (dim(X)= dim(M))。我正在尝试使用DT包将 X 显示为闪亮应用中的表格。我想显示矩阵 X ,其中不同的颜色由 M 的值决定。这意味着:X的单元格中的 color1,其中M> 1。 0(X [M> 0]),X的单元格中的color2,其中M <0(X [M <0])和X的单元格中的color3,其中M == 0(X [M == 0])

下一个代码显示我遇到的问题:         X < - 矩阵(c(1:9),3)         M < - 矩阵(c(-3:2),3)#矩阵更复杂并且在a中创建         反应环境。这只是一个例子

         X_colors <- reactive({

             DT::datatable(X()) %>% 
               formatStyle(
               columns = c(1:3),
               valueColumns(¿How do reference to M matrix?),
               backgroundColor = styleInterval(c(-1,0), c("lightgreen", 
               "lightred", "lightblue")
             ))
           })
          output$X_table_2 <- DT::renderDataTable(X_colors())

谢谢!!

1 个答案:

答案 0 :(得分:1)

您要求的是可能的,但不是非常简单。我的方法包括使用隐藏列。我的食谱&#34;:

  1. cbind&#34; conditions-matrix&#34; M 和&#34;值 - 矩阵&#34; X
  2. 使用options中的datatable参数隐藏属于条件矩阵的列。
  3. valueColumns
  4. 中将隐藏列设置为columns,将非隐藏列设置为DT::formatStyle
    library(DT)
    library(dplyr)   # for %>%
    
    print(M <- matrix(c(-3:2), 3))
    #      [,1] [,2]
    # [1,]   -3    0
    # [2,]   -2    1
    # [3,]   -1    2
    print(X <- matrix(letters[1:6], 3))
    #      [,1] [,2]
    # [1,] "a"  "d" 
    # [2,] "b"  "e" 
    # [3,] "c"  "f"
    
    cbind(M, X) %>% datatable(
      options = list(columnDefs = list(list(visible = FALSE, targets = 0:1)))
    ) %>%
      formatStyle(
        columns = 3:4,
        valueColumns = 1:2,
        backgroundColor = styleInterval(c(-.01, 0), c("red", "white", "green"))
      )
    

    请注意,我使用targets = 0:1来隐藏列1:2,因为此参数遵循javascript语法,其中索引以0而不是1开头。

    enter image description here