2016-08-13 4 views
1

Ich habe eine glänzende App erstellt, in die ich sie hochladen und daneben anzeigen möchte. Da meine Daten riesig sein werden, habe ich sie scrollbar gemacht und in eine Box gesteckt.Box nur anzeigen, wenn Daten in glänzende App geladen werden

Jetzt möchte ich die Box nur anzeigen, wenn Daten geladen sind.

enter image description here

Ich versuchte bedingte Panel, aber es hat nicht funktioniert. Hier

ist der Code

ui.R

library(shiny) 
library(shinydashboard) 
library(DT) 
library(ggvis) 
library(shiny) 

ui <- dashboardPage(
    dashboardHeader(title = "Dashboard"), 
    dashboardSidebar(sidebarMenu(

    menuItem("Data", tabName = "uploadData", icon = icon("table")) 

)), 
    dashboardBody(
    tabItems(
     # First tab content 
     tabItem(tabName = "gebIns" 
    ), 

     # Second tab content 
     tabItem(tabName = "uploadData", 
       fluidPage(
       fluidRow(
        column(3,titlePanel("Upload Your Data"), 
         fileInput('file1', 'Choose CSV File', 
            accept=c('text/csv', 
              'text/comma-separated-values,text/plain', 
              '.csv')), 
         tags$hr(), 
         checkboxInput('header', 'Header', TRUE), 
         fluidRow(column(6, 
             radioButtons('sep', 'Separator', 
                 c(Comma=',', 
                 Semicolon=';', 
                 Tab='\t'), 
                 ',')), 
            column(6, 
             radioButtons('quote', 'Quote', 
                 c(None='', 
                 'Double Quote'='"', 
                 'Single Quote'="'"), 
                 '"'))), 
         selectInput('y', 'Y Variable', '---'), 
         numericInput('noOfVar', 'Number of Variables', 1), 
         actionButton("submit", "Submit") 
       ), 

        column(9, 
         box(
          title = "Data", width = NULL, status = "primary", 
          div(style = 'overflow-x: scroll', DT::dataTableOutput('contents')) 
         ) 
       ) 
       ) 
      ) 
    ) 
    ) 
) 
) 

server.R

shinyServer(function(input, output, session) { 
    #load the data when the user inputs a file 
    theData <- reactive({ 
    infile <- input$file1   
    if(is.null(infile)) 
     return(NULL)   
    d <- read.csv(infile$datapath, header = T) 
    d   
    }) 

    output$contents <- DT::renderDataTable({ 
    data1 <- theData() 
    }) 

    # dynamic variable names 
    observe({ 
    data<-theData() 
    updateSelectInput(session, 'y', choices = names(data)) 
    }) 
    #gets the y variable name, will be used to change the plot legends 
    yVarName<-reactive({ 
    input$y 
    }) 
}) 

Antwort

2

Sie können renderUI und Zustand Ausgang Ihrer Daten verwenden:

# ui.R 
    column(9,uiOutput("box")) 

# server.R 
    output[["box"]] <- renderUI({ 

    if(is.null(theData()))return() 
    box(
     title = "Data", width = NULL, status = "primary", 
     div(style = 'overflow-x: scroll;', DT::dataTableOutput('contents')) 
    ) 

    }) 
Verwandte Themen