2015-08-21 10 views
5

Ich kann die Breite einer Datentabelle, die ich einer glänzenden App hinzugefügt habe, nicht mit der Funktion dataTableOutput() steuern. Ich habe versucht, den Parameter width innerhalb der Funktion zu verwenden, aber es ändert nichts in der Ausgabe und es gibt keinen Fehler ~ es sagt mir nicht, dass es den Parameter width ignoriert.Steuern der Tabellenbreite in Shiny dataTableOutput

library(shiny) 
library(shinythemes) 

ui <- fluidPage(theme = shinytheme("Spacelab"), 
      fluidRow(
       column(6,dataTableOutput(outputId = "table")), 
       column(6,p(textOutput("para"))) 
) 
) 

server <- function(input, output){ 

    df <- as.data.frame(matrix(0, ncol = 15, nrow = 20)) 

    output$table <- renderDataTable({df}) 

    output$para <- renderText({ 
    text <- rep(x = "Hello World",1000) 
    }) 
} 
shinyApp(ui = ui,server = server) 
+0

ich sehe nicht ein 'width' Argument' glänzend :: dataTableOutput', aber es sieht aus wie 'dataTableOutput' aus dem Paket DT hat einen. Hast du das DT-Paket nach dem Laden geladen? Sie können auch 'DT :: dataTableOutput' verwenden. – aosmith

+0

Wenn ich 'DT' anstelle von' shiny' verwende, wird die Datentabelle immer noch reaktiv sein? – Collin

+0

versuchen Sie [diese SO-Antwort] (https://stackoverflow.com/questions/31921238/shrink-dtdatableoutput-size) – Rivka

Antwort

11

dataTableOutput hat keine Argumentbreite. Sie können column innerhalb eines fluidRow mit dem Argument Breite verwenden, können eine ganze Zahl zwischen 1 und 12.

library(shinythemes) 
ui <- fluidPage(theme = shinytheme("Spacelab"), 
    fluidRow(
     column(
      dataTableOutput(outputId = "table"), width = 6) 
    ) 
) 

server <- function(input, output){ 
    df <- as.data.frame(matrix(0, ncol = 20, nrow = 5)) 
    output$table <- renderDataTable({df}, 
     options = list(scrollX = TRUE)) 
} 
shinyApp(ui = ui,server = server) 

Optionen aus der JavaScript-Bibliothek Datatable liefert direkt über renderDataTable Argument Optionen übergeben werden. Wenn Sie beispielsweise scrollX auf true festlegen, können Tabellen durchsucht werden.

+0

Ich versuchte mit Spalten und aktualisiert mein Beispiel entsprechend, es scheint wie 'dataTableOutput' will nicht zusammenarbeiten – Collin

+0

In Ihrem ursprünglichen Beispiel hatten Sie eine große Anzahl von Spalten. Wenn die Spalten zu breit sind, um in eine Teilmenge des Bereichs zu passen, wird die Tabelle mit dem verfügbaren Teil der Seite angezeigt. – CSJCampbell

+0

In Ihrem aktualisierten Beispiel wird der 'textOutput' in der richtigen Hälfte angezeigt und der' dataTableOutput' stürzt den Text im Firefox Browser ab. Welches Verhalten würden Sie lieber sehen? – CSJCampbell

3

Wenn Sie das "DT" R-Paket und die entsprechenden DT::dataTableOutput und DT::renderDataTable verwenden, können Sie eine Option "width" mit diesen Aufrufen verwenden, die entweder ein% (zB width = "100%") oder sein kann Pixel (Breite = 300), die Ihnen die gewünschte Kontrolle bringen sollen.

See: https://rstudio.github.io/DT/shiny.html

Hinweis von dieser Seite:

Wichtig: Stellen Sie sicher, dass die DT :: Präfix verwenden, wenn dataTableOutput und renderDataTable so dass die DT-Versionen dieser Funktionen aufrufen sind garantiert aufgerufen werden, anstelle der veralteten Shiny-Versionen. Wenn Sie sicherstellen, dass Bibliothek (DT) nach Bibliothek (glänzend), sollten die DT Versionen einfach die glänzenden Versionen überschreiben, wenn Sie nicht das DT :: Präfix verwenden (im Zweifelsfall verwenden Sie dieses Präfix, bis wir vollständig diese Funktionen aus glänzendem entfernen)

Verwandte Themen