2013-04-05 16 views
11

Il pulsante di invio è utile, ma non ho trovato un modo elegante per sopprimere l'output sul caricamento iniziale della pagina.Comportamento submitButton lucido al tempo di caricamento della pagina

Ad esempio, il tutorial Shiny rende l'output in carico.
http://rstudio.github.com/shiny/tutorial/#more-widgets

Come si assicura che non vengano chiamate funzioni reattive finché non si preme il pulsante di invio?

Ecco il codice in linea per l'esempio collegato sopra.

#ui.R 
library(shiny) 

# Define UI for dataset viewer application 
shinyUI(pageWithSidebar(

    # Application title. 
    headerPanel("More Widgets"), 

    # Sidebar with controls to select a dataset and specify the number 
    # of observations to view. The helpText function is also used to 
    # include clarifying text. Most notably, the inclusion of a 
    # submitButton defers the rendering of output until the user 
    # explicitly clicks the button (rather than doing it immediately 
    # when inputs change). This is useful if the computations required 
    # to render output are inordinately time-consuming. 
    sidebarPanel(
    selectInput("dataset", "Choose a dataset:", 
       choices = c("rock", "pressure", "cars")), 

    numericInput("obs", "Number of observations to view:", 10), 

    helpText("Note: while the data view will show only the specified", 
      "number of observations, the summary will still be based", 
      "on the full dataset."), 

    submitButton("Update View") 
), 

    # Show a summary of the dataset and an HTML table with the requested 
    # number of observations. Note the use of the h4 function to provide 
    # an additional header above each output section. 
    mainPanel(
    h4("Summary"), 
    verbatimTextOutput("summary"), 

    h4("Observations"), 
    tableOutput("view") 
) 
)) 



#server.R 
library(shiny) 
library(datasets) 

# Define server logic required to summarize and view the selected dataset 
shinyServer(function(input, output) { 

    # Return the requested dataset 
    datasetInput <- reactive({ 
    switch(input$dataset, 
      "rock" = rock, 
      "pressure" = pressure, 
      "cars" = cars) 
    }) 

    # Generate a summary of the dataset 
    output$summary <- renderPrint({ 
    dataset <- datasetInput() 
    summary(dataset) 
    }) 

    # Show the first "n" observations 
    output$view <- renderTable({ 
    head(datasetInput(), n = input$obs) 
    }) 
}) 

risposta

10

Un modo è quello di utilizzare actionButton (dal pacchetto shiny-incubator) e isolate. Here's un writeup che spiega come utilizzare i due insieme. Si tratta di un approccio intrinsecamente più flessibile rispetto a submitButton, che è un po 'troppo pesante e non abbastanza flessibile.

3

Ho avuto lo stesso problema per un ingresso campo di testo e ho usato un lavoro molto sporco in giro:

ho impostato il valore del campo iniziale per qualcosa come "please_type_stuff_here". In server.R Ho usato una clausola if per decidere se è necessario restituire qualcosa all'u:

if (input$data=="please_type_stuff_here") { 

} else { 
# Return the requested dataset 
    datasetInput <- reactive({ 
    switch(input$dataset, 
      "rock" = rock, 
      "pressure" = pressure, 
      "cars" = cars) 
    }) 

    # Generate a summary of the dataset 
    output$summary <- renderPrint({ 
    dataset <- datasetInput() 
    summary(dataset) 
    }) 

    # Show the first "n" observations 
    output$view <- renderTable({ 
    head(datasetInput(), n = input$obs) 
    }) 
} 
Problemi correlati