2017-03-24 2 views
2

Ich möchte dem Benutzer so viele Zeilen anzeigen, wie er möchte. Wenn er es nicht will, zeige ich nichts.Der Raum verschwindet nicht, wenn die Tabellenausgabe ausgeschaltet ist

Wenn ich jedoch etwas und dann nichts zeige, verschwindet der Tisch, aber es bleibt Platz. Gibt es eine Möglichkeit, auch Speicherplatz zu entfernen?

Vielen Dank für Ihre Hilfe im Voraus!

Reproduzierbare Beispiel

require(shiny) 
if (interactive()) { 
    ui <- fluidPage(
     column(4, 
       selectInput("select", label = h3("How many rows"), 
          choices = list("0" = 0, "3" = 3, "6" = 6, "9" = 9), 
          selected = 3) 
     ), 
     column(8, 
       verbatimTextOutput("Warning_1"), 
       dataTableOutput("table"), 
       verbatimTextOutput("Warning_2")) 

    ) 
    server <- function(input, output) { 

     output$Warning_1 <- renderText({ 
      answer <- paste("We show", input$select, "rows") 
     }) 

     output$Warning_2 <- renderText({ 
      answer <- paste("As I said we show", input$select, "rows") 
     }) 

     output$table <- renderDataTable({ 

      if (input$select == "0") { 
       return() 
      } else { 

       dt <- head(mtcars, as.numeric(input$select)) 
       return(dt) 
      } 

     }, 
     options = list(
      lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')), 
      pageLength = 15) 
     ) 
    } 


    shinyApp(ui = ui, server = server) 
} 

UPDATE Frage zu klären:

Dieser Raum mit roten Kreuz markiert sollte verschwinden, wenn ich 0 Zeilen wählen zu zeigen.

This space marked with red cross should disappear if I choose 0 lines to show.

Auch Session info für alle Fälle:

> sessionInfo() 
R version 3.3.2 (2016-10-31) 
Platform: x86_64-apple-darwin15.6.0 (64-bit) 
Running under: macOS Sierra 10.12.3 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] DT_0.2   data.table_1.9.6 jsonlite_1.1  plotly_4.5.2  
[5] ggplot2_2.1.0 shiny_1.0.0  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.7  magrittr_1.5  munsell_0.4.3  viridisLite_0.1.3 
[5] colorspace_1.2-7 xtable_1.8-2  R6_2.2.0   httr_1.2.1  
[9] plyr_1.8.4  dplyr_0.5.0  tools_3.3.2  grid_3.3.2  
[13] gtable_0.2.0  DBI_0.5-1   htmltools_0.3.5 yaml_2.1.13  
[17] lazyeval_0.2.0 digest_0.6.10  assertthat_0.1 tibble_1.2  
[21] tidyr_0.6.1  purrr_0.2.2  base64enc_0.1-3 htmlwidgets_0.7 
[25] mime_0.5   labeling_0.3  RevoUtils_10.0.2 scales_0.4.0  
[29] chron_2.3-47  httpuv_1.3.3  
> 
+0

Ich sehe nicht, was Sie meinen. Wenn ich Null anführe, wird die Datentabelle überhaupt nicht angezeigt. Dies scheint das zu sein, was Sie wollen. Ich sehe keinen leeren Platz, wo die Datentabelle war. Können Sie Ihr Problem genauer beschreiben? –

+0

@ Mike Wise Mike Ich schätze Ihre Sorgfalt in der Tat. Ich füge Bild- und Sitzungsinformationen hinzu, um meine Frage zu klären. Ich hoffe, du kannst mir helfen. –

+0

Ich sehe. Das sehe ich nicht auf meinem Windows 10-PC. Der Bereich, den Sie mit einem roten X markiert haben, ist nicht vorhanden, diese beiden Zeilenstatusmeldungen liegen direkt übereinander. Meine Sitzungsinformationen sind fast identisch mit denen, außer dass ich R Version 3.3.3 verwende. Funktioniert auch im Browser mit Chrome. –

Antwort

1

Das von renderUI gelöst werden kann, die eval(parse(...)) der glänzenden Welt. Es ist ein wenig umständlich, aber wenn Sie auf die Funktionalität bestehen, ist dies eine Option.

library("shiny") 
ui <- fluidPage(
    column(4, 
     selectInput("select", label = h3("How many rows"), 
        choices = list("0" = 0, "3" = 3, "6" = 6, "9" = 9), 
        selected = 3) 
), 
    uiOutput("disappearing_table") 
) 

server <- function(input, output) { 

    output$Warning_1 <- renderText({ 
    answer <- paste("We show", input$select, "rows") 
    }) 

    output$Warning_2 <- renderText({ 
    answer <- paste("As I said we show", input$select, "rows") 
    }) 

    output$table <- renderDataTable({ 
    head(mtcars, as.numeric(input$select)) 
    }, 

    options = list(
    lengthMenu = list(c(5, 15, -1), c('5', '15', 'All')), 
    pageLength = 15) 
) 

    output$disappearing_table <- renderUI({ 
    if (input$select == "0") { 
     column(8, 
      verbatimTextOutput("Warning_1"), 
      verbatimTextOutput("Warning_2") 
    ) 
    } else { 
     column(8, 
      verbatimTextOutput("Warning_1"), 
      dataTableOutput("table"), 
      verbatimTextOutput("Warning_2") 
    ) 
    } 
    }) 
} 

shinyApp(ui = ui, server = server) 

Komprimiert, wenn keine Zeilen ausgewählt:

enter image description here

expandiert nach benötigten Raum, wenn sie aufgerufen:

enter image description here

+0

mlegge vielen Dank für Ihre Lösung. Ich habe deinen Post irgendwie vermisst, aber jetzt habe ich ihn gefunden. Alles funktioniert jetzt perfekt! –

+0

kein Problem, glücklich zu helfen – mlegge

Verwandte Themen