2014-12-19 9 views
5

Vorrei ottenere un DataTable (con tutte le sue funzioni di classificazione, ricerca e pagina) che non si estende completamente sulla pagina e genera grandi quantità di spazio bianco in ciascuna colonna ...Larghezze delle colonne in renderDataTable di un'app lucida senza allungamento

enter image description here

... idealmente con la larghezza delle colonne simile allo stile "wrap" da renderTable ...

enter image description here

I kn ow Posso correggere le larghezze relative delle colonne, tuttavia, la mia tabella si aggiornerà in modo dinamico con un numero diverso di colonne dipendenti dagli input selezionati. Preferirei colonne aggiuntive da espandere nello spazio vuoto sul lato destro e quindi attivare una barra di scorrimento orizzontale se diventa più ampia della larghezza della finestra del browser.

riproducibile esempio delle tabelle nelle immagini di cui sopra ...

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

So che non indirizza direttamente la domanda, ma RStudio ha appena annunciato htmlwidgets per R che include tra le altre cose interessanti, DataTables. http://www.htmlwidgets.org/showcase_datatables.html – Khashaa

risposta

6

Penso che si dovrebbe usare drawCallback in DataTable. Qui ho appena modificato un po 'il tuo esempio per correggere la larghezza del dataTable a 600px. puoi giocare con la possibile funzione di java script nella funzione di callback per fare quasi tutto.

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

Assumendo che il data.frame è df, quindi inserire questo codice all'inizio del blocco reattivo/renderTable sul lato server. Riunirà i nomi delle colonne alla lunghezza desiderata e quindi ridurrà le dimensioni della tabella. È sempre possibile modificare la larghezza per uguagliare la larghezza desiderata.

library(stringr) 

colnames(df) = str_wrap(colnames(df),width = 10) 
Problemi correlati