2013-02-15 4 views

Antwort

18

Wenn Sie nur reguläre Variablen aktualisieren (in der globalen Umgebung oder anders), weiß Shiny nicht, dass sie darauf reagieren. Sie müssen stattdessen ein Objekt reactiveValues verwenden, um Ihre Variablen zu speichern. Sie erstellen einen mit reactiveValues() und es funktioniert ähnlich wie eine Umgebung oder Liste - Sie können Objekte nach Namen darin speichern. Sie können entweder $foo oder [['foo']] Syntax für den Zugriff auf Werte verwenden.

Sobald eine reaktive Funktion einen Wert von einem reactiveValues Objekt liest, wird der reaktive Wert, wenn dieser Wert in der Zukunft von einem anderen Wert überschrieben wird, wissen, dass er erneut ausgeführt werden muss.

Hier ist ein Beispiel (komplizierter gemacht durch die Tatsache, dass Sie load anstatt etwas verwenden, die einen einzelnen Wert zurückgibt, wie read.table):

values <- reactiveValues() 
updateData <- function() { 
    vars <- load(file = "my_data_frame.RData", envir = .GlobalEnv) 
    for (var in vars) 
    values[[var]] <- get(var, .GlobalEnv) 
} 
updateData() # also call updateData() whenever you want to reload the data 

output$foo <- reactivePlot(function() { 
    # Assuming the .RData file contains a variable named mydata 
    plot(values$mydata) 
} 

Wir sind auf diesem Material eine bessere Dokumentation ziemlich bald haben sollte. Danke, dass Sie uns in der Zwischenzeit begleitet haben.

+0

Sehr hilfreich. Vielen Dank! Der Trick mit get() ist auch gut zu wissen :) – user1342178

Verwandte Themen