2016-07-29 11 views
0

Ich habe eine glänzende App mit einer längeren Berechnung abhängig von der Eingabe. Ich frage mich, ob es möglich ist, einen Text im Hauptfenster zur gleichen Zeit anzuzeigen, wenn die Berechnung durchgeführt wurde (und nicht vorher).R glänzend ausblenden mainPanel Objekt während der Rechenzeit

Lassen Sie uns ein einfaches Beispiel machen. Ich simulierte die längere Berechnung mit Sys.sleep():

# Define UI for application that draws a histogram 

ui <- shinyUI(fluidPage(

# Application title 
    titlePanel("Old Faithful Geyser Data"), 

# Sidebar with a slider input for number of bins 
    sidebarLayout(
     sidebarPanel(
     sliderInput("bins", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30) 
    ), 

     # Show a plot of the generated distribution 
     mainPanel(
     h3('This is an example'), 
     plotOutput("distPlot") 
    ) 
    ) 
)) 

# Define server logic required to draw a histogram 
server <- shinyServer(function(input, output) { 

    output$distPlot <- renderPlot({ 
     # generate bins based on input$bins from ui.R 
     x <- faithful[, 2] 
     bins <- seq(min(x), max(x), length.out = input$bins + 1) 

     # draw the histogram with the specified number of bins 
     hist(x, breaks = bins, col = 'darkgray', border = 'white') 
     Sys.sleep(5) 
    }) 
}) 

# Run the application 
shinyApp(ui = ui, server = server) 

Das Ziel wäre, den Text zu zeigen, ‚Dies ist ein Beispiel‘ zugleich die Berechnung durchgeführt wird und nicht vorher. Ich denke, ich muss den Text irgendwie reaktiv machen, aber bis jetzt habe ich keine Lösung dafür gefunden. Vielleicht könnte ein conditionalPanel es tun, aber wie kann ich die Rechenzeit in den Zustand bringen? Irgendwelche Ideen?

Antwort

1

Wäre das, wonach Sie suchen? Ihre Textvariable als reaktiv nach der Beobachtung des Ereignisses von distPlot

library(shiny) 
# Define UI for application that draws a histogram 

ui <- shinyUI(fluidPage(

    # Application title 
    titlePanel("Old Faithful Geyser Data"), 

    # Sidebar with a slider input for number of bins 
    sidebarLayout(
    sidebarPanel(
     sliderInput("bins", 
        "Number of bins:", 
        min = 1, 
        max = 50, 
        value = 30) 
    ), 
    # Show a plot of the generated distribution 
    mainPanel(
     textOutput('text1'), 
     plotOutput("distPlot") 
    ) 
) 
)) 

# Define server logic required to draw a histogram 
server <- shinyServer(function(input, output) { 
    output$distPlot <- renderPlot({ 
    # generate bins based on input$bins from ui.R 
    x <- faithful[, 2] 
    bins <- seq(min(x), max(x), length.out = input$bins + 1) 
    # draw the histogram with the specified number of bins 
    hist(x, breaks = bins, col = 'darkgray', border = 'white') 
    Sys.sleep(2) 

    }) 
    observeEvent(plotOutput("distPlot"), { 
    output$text1 <- renderText({ paste("Number of bins:", input$bins)}) 
    }) 
    }) 

# Run the application 
shinyApp(ui = ui, server = server) 
+0

Genau! Vielen Dank –