2016-05-09 15 views
1

Mein reaktiver Ausdruck erzeugt einen Vektor numerischer Werte. Gibt es eine Möglichkeit, die zuvor gerenderten Werte zu speichern und sie das nächste Mal wiederzuverwenden? Ich habe versucht, einen zusätzlichen reaktiven Ausdruck zu erstellen, um die Werte zu speichern und es dann wieder aufrufe, wenn den ersten reaktiven Ausdruck verwendet, aber das verursacht die folgenden Fehler:Wie kann ich einen vorherigen reaktiven Wert in einem reaktiven Ausdruck in glänzend verwenden?

Error in : evaluation nested too deeply: infinite recursion/options(expressions=)? 

Ich kann mein ganzes Beispiel nicht laden, da es dich um eine Erhebung ist, die ist irgendwie vertraulich. Ich versuche jedoch Einblicke in meine Server.R-Datei zu geben.

Das Problem ist, dass yvals auf den Eingaben von ui.R basiert. Allerdings ist xvals nicht (zumindest nicht direkt). Wenn also xvals aktualisiert wird, sollte es die alten/vorherigen Werte als Eingabe annehmen. Es tut mir leid für das Durcheinander - mir ist bewusst, dass es mir ohne reproduzierbares Beispiel schwer fällt, mir zu helfen. Aber im Grunde möchte ich nur das vorherige reaktive Ergebnis beheben und es das nächste Mal wiederverwenden.

+0

Bitte geben Sie ein Beispiel von dem, was Sie versuchen zu erreichen. Siehe den folgenden Beitrag zum Bereitstellen eines [reproduzierbaren Beispiels] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). – lmo

+1

Mögliches Duplikat von [Kann ich den alten Wert eines reaktiven Objekts speichern, wenn es sich ändert?] (Http://stackoverflow.com/questions/26432789/cani-save-the-old-value-of-a-reactive -object-when-it-changes) –

+1

Ich glaube, du suchst nach 'reactiveValues', aber ich warte auf dein reproduzierbares Beispiel, bevor du antwortest. – Pete900

Antwort

1

Ein bisschen spät, aber ich denke, das ist, was Sie wollen - es war eine gute Übung. Es verwendet eine reaktive Variable memory, um von einer Iteration zur nächsten zu verfolgen. Beachten Sie, dass der Ausdruck isolate den Rekursionsfehler vermeidet.

library(shiny) 

ui <- fluidPage(
    h1("Reactive Memory"), 
    sidebarLayout(
    sidebarPanel(
     numericInput("val","Next Value",10) 
    ), 
    mainPanel(
     verbatimTextOutput("prtxval") 
    ) 
)) 
server <- function(input,output,session) { 

    nrowsin <- 6 
    ini_xvals <- 1:nrowsin 

    memory <- reactiveValues(dat = NULL) 
    yvals <- reactive({ rep(input$val,nrowsin) }) 

    xvals <- reactive({ 

    isolate(dat <- memory$dat) 
    if (is.null(dat)) { 
     memory$dat <- data.frame(xvals = ini_xvals,yvals()) 
    } else { 
     memory$dat <- data.frame(dat,yvals()) 
    } 
    return(memory$dat) 
    }) 

    output$prtxval <- renderPrint({ xvals() }) 
} 
shinyApp(ui,server) 

Bild:

enter image description here

Verwandte Themen