Show box only when data is loaded in shiny app

一个人想着一个人 提交于 2019-12-12 13:26:15

问题


I have made a shiny app in which I want to upload and display it beside it. Since my data will be huge so I made it scroll-able and put it in a box.

Now I want to show the box only when data is loaded.

I tried conditional panel but it didn't work.

Here is the 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
  }) 
})

回答1:


You can use renderUI and condition output on your data:

# 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'))
    )

  })


来源:https://stackoverflow.com/questions/38931289/show-box-only-when-data-is-loaded-in-shiny-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!