问题
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