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 AntwortIch 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