2014-12-19 11 views
5

Ich möchte eine DataTable (mit all seinen Ranking, Such-und Seitenfunktionen), die nicht vollständig über die Seite erstreckt, und führt zu großen Mengen an Leerraum in jedem Spalte ...Spaltenbreiten in renderDataTable einer glänzenden App ohne Stretching

enter image description here

... idealerweise mit Spaltenbreiten ähnlich dem "wrap" Stil von renderTable ...

enter image description here

I kn Da ich relative Spaltenbreiten festlegen kann, wird meine Tabelle dynamisch mit einer unterschiedlichen Anzahl von Spalten aktualisiert, die von den ausgewählten Eingaben abhängen. Ich würde es vorziehen, wenn zusätzliche Spalten in den leeren Bereich auf der rechten Seite expandieren und dann eine horizontale Bildlaufleiste auslösen, wenn sie breiter wird als die Breite des Browserfensters.

Reproduzierbare Beispiel der Tabellen in den Bildern oben ...

library(shiny) 
runApp(list(
    ui = navbarPage(
    title = 'Tables', 
    tabPanel('dataTableOutput', dataTableOutput('ex1')), 
    tabPanel('tableOutput', tableOutput('ex2')) 
), 
server = function(input, output) { 
    output$ex1 <- renderDataTable(iris) 
    output$ex2 <- renderTable(iris) 
} 
)) 
+0

Ich weiß, dass es Ihre Frage nicht direkt adressiert, aber RStudio hat gerade htmlwidgets für R angekündigt, das unter anderem coole Dinge, DataTables, enthält. http://www.htmlwidgets.org/showcase_datatables.html – Khashaa

Antwort

6

Ich denke, dass Sie drawCallback in Tables verwenden sollten. Hier habe ich Ihr Beispiel ein wenig geändert, um die Breite von dataTable auf 600px festzulegen. Sie können mit der möglichen Java-Script-Funktion in der Callback-Funktion spielen, um fast alles zu tun.

library(shiny) 
runApp(list(
    ui = navbarPage(
    title = 'Tables', 
    tabPanel('dataTableOutput', dataTableOutput('ex1')), 
    tabPanel('tableOutput', tableOutput('ex2')) 
), 
    server = function(input, output) { 
    output$ex1 <- renderDataTable(iris, 
            option = list(drawCallback = I("function(settings) {document.getElementById('ex1').style.width = '600px';}"))) 
    output$ex2 <- renderTable(iris) 
    } 
)) 
0

Angenommen, Ihre data.framedf ist, dann setzen Sie diesen Code am Anfang des reaktiven/renderTable Block auf der Serverseite. Es wird die Spaltennamen auf die gewünschte Länge umbrechen und dadurch die Größe der Tabelle reduzieren. Sie können die Breite immer ändern, um der gewünschten Breite zu entsprechen.

library(stringr) 

colnames(df) = str_wrap(colnames(df),width = 10) 
Verwandte Themen