2016-01-18 6 views
5

Ich muss die Spaltenbreite einer DataTabe in einer R Shiny App einstellen. Ich ging durch die Data Table Options in der Dokumentation. Außerdem habe ich this und this Fragen in Stackoverflow überprüft.Einstellung der Spaltenbreite in R Shiny DataTable funktioniert nicht im Falle von Losen der Spalte

Die Einstellungsbreite funktioniert, wenn die DataTable nicht zu viele Spalten enthält. In Fällen jedoch, wenn mehrere Spalten vorhanden sind, werden die Einstellungen trotz der absoluten Einheit der Breite überschrieben (z. B. '600px').

Im folgenden Code-Schnipsel:

output$mytable <- DT::renderDataTable({ 
    num_of_cols <- 3 
    cbind(iris,iris)[,1:num_of_cols]}, 
    options = list(autoWidth = TRUE, 
    columnDefs = list(list(width = '500px', targets = 1)))) 

wenn ich Setvariable num_of_cols = 3 es funktioniert gut. Die Erhöhung der angezeigten Spalten (num_of_cols) führt jedoch zu einer Verringerung der Spaltenbreite. Bei vielen angezeigten Spalten hat die Breiteneinstellung scheinbar keine Auswirkungen.

Ich versuchte Option autoWidth = FALSE, aber es gibt kein anderes Ergebnis. Ich habe auch versucht, JavaScript in Optionen drawCallback wie im Antwortabschnitt this Thread beschrieben, aber es gibt das gleiche Ergebnis.

Wie kann ich DataTable die gewünschte Spaltenbreite anzeigen lassen?

Antwort

1

Wie vorgeschlagen here, Einstellung scrollX=T und halten autoWidth = TRUE in den Optionen sollte funktionieren.

+0

Danke. Frustrierend unklar. – geotheory

1

Wow. Ich kann das nicht glauben. Die Spaltenbreite für ein Tabellenobjekt sollte so klar sein, und für Datentabellen war es so verwirrend. Ich habe viel Zeit damit verbracht, dies zu erforschen und zu trocknen, bevor ich die Antwort in den Tooltip-Anzeigen in RStudio entdeckte.

DT::renderDataTable({ 
     datatable(df) %>% formatStyle(columns = c(1,2), width='200px') 
}) 

EDIT:

Dies könnte funktionieren, aber es funktioniert nicht wirklich funktioniert besser als jede andere Art und Weise. Es gibt keinen direkten Weg, dies zu tun, was ich sagen könnte. Hier ist der Code, den ich JETZT benutze ... Ich glaube nicht, dass ich etwas anderes brauchen werde. Ich musste es Spalte für Spalte ausarbeiten und kontinuierlich zurückgehen und anpassen, um es zum Laufen zu bringen. Scheint wie etwas, das repariert werden sollte.

Ich legte die UI Breite Wert auf 1200px zu starten und skalierte es zurück, wenn ich fertig war.

#UI 
DT::dataTableOutput(outputId = "tableID", width = '830px') 
#Server 
options = list(autoWidth = TRUE, 
       columnDefs = list(list(targets=c(0), visible=TRUE, width='90'), 
           list(targets=c(1), visible=TRUE, width='145'), 
           list(targets=c(2), visible=TRUE, width='105'), 
           list(targets=c(3), visible=TRUE, width='100'), 
           list(targets=c(4), visible=TRUE, width='100'), 
           list(targets=c(5), visible=TRUE, width='100'), 
           list(targets=c(6), visible=TRUE, width='100'), 
           list(targets=c(7), visible=TRUE, width='90'), 
           list(targets='_all', visible=FALSE) 
Verwandte Themen