2017-09-22 4 views
1

J'ai une matrice M avec des valeurs positives et négatives. J'essaie d'afficher comme une table dans l'application brillante, en utilisant le paquet DT. Je voudrais afficher la matrice avec des couleurs différentes. Les nombres positifs en nombres rouges et négatifs (par exemple).Comment afficher dans une application brillante une matrice, en spécifiant la couleur avec des conditions?

Jusqu'ici, je peux seulement ajouter des couleurs de façon individuelle. Mais je veux ajouter des couleurs de cette façon: si matrix_values> 0 "color1", si matrix_values ​​< 0 "color2".

M <- matrix(c(-3:2), 3) # The matrix is more complex and it's created in a 
reactive environment. Here is only an example 

M_out <- reactive({ 

DT::datatable(M()) %>% 
    formatStyle(
    columns = c(1:7), 
    backgroundColor = styleEqual(c(0, 1), c("green", "red") 
    )) 
}) 
output$X_table_2 <- DT::renderDataTable(M_1X2()) 

Merci!

Répondre

0

Vous pouvez utiliser DT::styleInterval au lieu de DT::styleEqual

library(DT)  # for datatable, formatStyle, styleInterval 
library(dplyr) # for %>% 

myDT <- matrix(c(-3:2), 3) %>% datatable %>% 
    formatStyle(
    columns = 1:2, 
    backgroundColor = styleInterval( 
     cuts = c(-.01, 0), 
     values = c("red", "white", "green") 
    ) 
) 

myDT 

Runnig ces lignes rstudio affiche la matrice formatée dans le volet de visualisation. Si vous n'utilisez pas RStudio, vous pouvez également afficher la table dans une application brillante.

library(shiny) 
shinyApp(
    ui = fluidPage(DT::dataTableOutput('table')) 
    server = function(input, output, session){ 
    output$table = DT::renderDataTable({myDT}) 
    } 
) 
+0

Merci. Cela fonctionne bien. Laissez-moi poser une autre question. En fait, j'essaie d'afficher une matrice X de dimension égale à M. Au lieu d'afficher M, je voudrais afficher la matrice X, pas M. Cela signifie: * color1 dans les cellules de X où M> 0 (X [M > 0]), color2 dans les cellules de X où M <0 (X [M <0]) et color3 dans les cellules de X où M == 0 (X [M == 0]) *. Est-il possible de le faire de manière simple? Merci !!! –

+0

Oui, c'est possible, mais pas très simple. Vous pouvez ajouter les colonnes de M en tant que colonnes cachées à la table et les utiliser en tant que 'valueColumns' dans' formatStyle'. –

+0

Je viens de mettre à jour la réponse pour discuter de comment partir d'une matrice X selon une autre matrice M. –