Wie können Sie mehrere Ausgaben derselben Analyse rendern, ohne sie mehrmals auszuführen? (Glänzend

Ich schreibe eine glänzende App, in der eine stochastische Funktion vier Objekte generiert - ein Plot und drei Tabellen. Ich möchte jedoch jedes Objekt auf verschiedenen Registerkarten rendern, ohne die Funktion viermal auszuführen, da diese stochastische Funktion vier verschiedene Versionen generiert. Ich bin online recherchiert worden und finde, dass viele Leute "reaction ()" empfehlen, aber ich verstehe immer noch nicht ganz, wie ich es auf mein Problem anwenden soll. Wie kann ich diese vier Objekte beim Rendern mit nur einer Ausführung der Funktion verwenden?

Meine "server.R" -Struktur sieht im Grunde wie folgt aus:

shinyServer(function(input, output) {

     stochastic_function() {
          ...
       plot1 <- ...
       table1 <- ...
       table2 <- ...
       table3 <- ...
       result <- list(plot, table1, table2, table3)
     return(result)
     }

 output$plot <- renderPlot({

})

 output$table1 <- renderTable({

})

 output$table2 <- renderTable({

})

 output$table3 <- renderTable({

})

...

Also, ich habe so etwas wie unten für die stochastische Funktion ausprobiert:

model <- eventReactive(input$goButton, {
        reactive(WG_Model(cdata = cdata(), # load data from outside env
                          sdata = sdata(), # load data from outside env
                          N = input$n, 
                          end_date = input$end_date,
                          cpx_goal = input$cpx,
                          N_new = input$n2, 
                          end_date_new = input$end_date2,
                          spend_range = input$s_range,
                          spend_incr = input$s_incr
                          ) 
                )
})

Die Idee ist, einen "GoButton" hinzuzufügen, um die Funktion zu starten und dann alle Ausgaben in einem reaktiven Spaß zu speichern (). So kann ich jede Ausgabe rendern mit:

 output$plot <- renderPlot({
   model$gplot
})

 output$table <- renderTable({
   model$table
})

# Render UI section 
 output$tb <- renderUI({
  tabsetPanel(tabPanel("About Model", plotOutput("plot")), 
              tabPanel("About Model", tableOutput("table")))

  })

Ich habe jedoch nur die Meldung "Fehler: Objekt vom Typ 'Closure' ist nicht teilbar" in der Benutzeroberflächenausgabe erhalten. Welchen Teil habe ich vermisst?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage