Mache das Objekt, das in einem reaktiven Objekt erstellt wurde, einem anderen in glänzendem [Duplikat] verfügbar.

Diese Frage hat hier bereits eine Antwort:

Globales Objekt in Shiny setzen 1 Antwort

Ich habe eine glänzende App, in der ich ein Objekt basierend auf Schiebereglern definiere und ein @ erstelldata.frame davon. Dies wird verwendet, um ein Diagramm zu erstellen, unter dem ich eine Übersichtstabelle einfügen möchte. Mein Problem ist, dass der Plot innerhalb eines reaktiven Objekts definiert werden muss, um basierend auf den Schiebereglern aktualisiert zu werden, aber ich habe festgestellt, dass, als ich versuchte, auf das Objekt zuzugreifen, um eine Zusammenfassung innerhalb eines @ zu druckander reaktives Objekt, es wurde nicht gefunden.

Ich möchte nicht zweimal denselben Berechnungscode durchlaufen, nur um das Objekt in das andere reaktive Objekt zu übertragen. Meine beiden ersten Ideen:

Ich habe versucht mitsave(object, file = "...") innerhalb des ersten reaktiven Objekts und dann setzenload(file = "...") in der Sekunde, aber es wird nicht aktualisiert.Ich dachte daran, mein Objekt außerhalb meines reaktiven @ zu definiereplotOutput definition, aber ich bin mir ziemlich sicher, dass es nicht aktualisiert wird, wenn Benutzereingaben geändert werden. es bleibt nur bei dem Wert des anfänglicheninput Objektstandardeinstellungen.

Na ja, habe gerade die letztere Idee ausprobiert und es kommt noch nicht einmal so weit:

Ich stelle es vorshinyServer(...) und es können keine Daten generiert werden, da mein Anruf von @ abhäninput und es weiß nicht überinput an diesem PunktIch stelle es nachshinyServer(...) Aber vorherrenderPlot(...) zu versuchen, eine Art "global verfügbares" Objekt für alle Ausgabeobjekte zu erstellen, und es macht mir Vorwürfe, wenn ich versuche, etwas zu tun, das @ verwendinput außerhalb einer reaktiven Funktion.

Hier ist ein Beispiel zur Veranschaulichung, modifiziert von Shiny's "Hallo Shiny!" Beispie:

ui.R

library(shiny)

# Define UI for application that plots random distributions 
shinyUI(pageWithSidebar(

  # Application title
  headerPanel("Hello Shiny!"),

  # Sidebar with a slider input for number of observations
  sidebarPanel(
    sliderInput("obs", 
                "Number of observations:", 
                min = 1,
                max = 1000, 
                value = 500)
  ),

  # Show a plot of the generated distribution
  mainPanel(
    plotOutput("distPlot"),
    tableOutput("summary")
  )
))

server.R

library(shiny)

# Define server logic required to generate and plot a random distribution
shinyServer(function(input, output) {

  output$distPlot <- renderPlot({

    # generate an rnorm distribution and plot it
    dist <- rnorm(input$obs)
    hist(dist)
  })

  output$summary <- renderTable({
    #dist <- rnorm(input$obs)
    summary <- table(data.frame(cut(dist, 10)))
  })
})

Wenn Sie es ausführen, wie es ist,cut wird werfen und Fehler, weil es nicht über @ wedist. Wenn Sie die Zeile auskommentieren, in der wir @ neu definierdist wie in @ gemacplotOutput, dann wird es funktionieren.

Dies ist einfacher Code - meiner ist viel komplizierter und ich würde es wirklich vorziehen, ihn nicht zweimal auszuführen, nur um das gleiche Ergebnis einem anderen reaktiven Ausgang mitzuteilen.

Vorschläge

Antworten auf die Frage(1)

Ihre Antwort auf die Frage