2016-07-25 34 views
0

Die Antwort ist wahrscheinlich offensichtlich, aber ich habe mit dem backgroundColor-Attribut im DT-Paket untersucht, um die Farbe der gesamten Zeile statt nur ändern Wert, den ich verwende, um die Zeile auszuwählen, und ich habe es nicht geschafft.Verwenden Sie backgroundColor im DT-Paket, um eine vollständige Zeile anstelle eines einzelnen Werts zu ändern

Also im Grunde in meiner Shiny app, ich habe eine Datatable Ausgabe in meiner Server-Datei, wo ich dies schrieb:

output$tableMO <- DT::renderDataTable({ 
    datatable(DFSurvieMO, 
       options = 
       list(displayStart= numerMO()-2, 
         pageLength = 15, 
         lengthChange = FALSE, searching =FALSE),rownames= FALSE) %>% formatStyle(
     c(1:2), 
     backgroundColor = 
     if(numerMO()>1) { 
      styleInterval(c(DFSurvieMO[,1][numerMO()-1],DFSurvieMO[,1][numerMO()]), c('blank','lightblue', 'blank')) 
     } 
     else { 
      styleInterval(DFSurvieMO[,1][numerMO()], c('lightblue', 'blank'))} 

    ) 
    }) 

Und ich nur eine Datentabelle mit einer farbigen einzelnen Zelle, was in meiner App zu bekommen. Ich habe versucht, target = 'row', aber entweder habe ich es nicht an der richtigen Stelle oder es funktioniert nicht. Wie kann ich die ganze Reihe färben? Danke.

Antwort

0

Sie können eine benutzerdefinierte JS Funktion mit rowCallback schreiben. Unten habe ich eine reaktive geschrieben, die auf die slider hören wird und wenn die slider Werte in der mtcars Datenmenge größer als Ihr Wert sind, wird es die Zeile neu streichen. Beachten Sie, dass aData[1] die Spalte cyl innerhalb des mtcars-Datensatzes ist.

Apologies für Ihren Code nicht verwenden, da ich ein allgemeineres Beispiel

rm(list = ls()) 
library(shiny) 
library(DT) 

ui <- basicPage(
    sliderInput("trigger", "Trigger",min = 0, max = 10, value = 6, step= 1), 
    mainPanel(DT::dataTableOutput('my_table')) 
) 

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

    my_callback <- reactive({ 
    my_callback <- 'function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {if (parseFloat(aData[1]) >= TRIGGER)$("td", nRow).css("background-color", "#9BF59B");}' 
    my_callback <- sub("TRIGGER",input$trigger,my_callback) 
    my_callback 
    }) 

    output$my_table = DT::renderDataTable( 
    datatable(mtcars,options = list(
     rowCallback = JS(my_callback()),searching = FALSE,paging = FALSE),rownames = FALSE) 
) 
} 
runApp(list(ui = ui, server = server)) 

enter image description here

+0

Ok also denke ich, das ist das, was ich suchte, ich weiß nicht JS weiß aber so machen wollte Ich kann es schwer haben, dies auf meinen Code anzuwenden, aber es sei denn, es gibt eine Option in R, um dasselbe zu tun, werde ich diese Methode ausprobieren. Danke – PaoloH

+0

Je mehr Sie es benutzen, desto besser. Lass dich nicht entmutigen, wenn du es nicht weißt. Es ist nicht so schlimm wie du denkst. Ich habe das nicht so geschrieben, wie ich vor langer Zeit ein Beispiel auf GitHub gefunden habe –