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ę.
Bardzo pomocna. Dziękuję Ci! Sztuczka z get() jest również dobrze wiedzieć :) – user1342178