2013-02-15 9 views

Odpowiedz

18

Jeśli tylko zaktualizujesz zwykłe zmienne (w środowisku globalnym lub w inny sposób), Shiny nie będzie na nie reagować. Do przechowywania zmiennych należy użyć obiektu reactiveValues. Tworzysz go używając reactiveValues() i działa on podobnie do środowiska lub listy - możesz przechowywać obiekty według nazwy. Do uzyskiwania dostępu do wartości można użyć składni $foo lub [['foo']].

Gdy funkcja reaktywna odczyta wartość z obiektu reactiveValues, jeśli ta wartość zostanie nadpisana inną wartością w przyszłości, funkcja bierna będzie wiedziała, że ​​musi zostać ponownie uruchomiona.

Oto przykład (bardziej skomplikowana przez fakt, że używasz load zamiast czegoś, co zwraca pojedynczą wartość, jak 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) 
} 

Powinniśmy mieć lepszej dokumentacji na tej rzeczy dość szybko. Dzięki, że w międzyczasie mieliśmy z nami radę.

+0

Bardzo pomocna. Dziękuję Ci! Sztuczka z get() jest również dobrze wiedzieć :) – user1342178

Powiązane problemy